使用预处理指令#define for long long
Using preprocessing directive #define for long long
#include <iostream>
using namespace std;
#define ll long long
int main() {
int a = 5;
ll maxi = 1;
maxi = max(maxi, maxi * ll(a));
cout<<maxi<<endl;
return 0;
}
为什么这段代码会抛出错误?我不明白 #define ll long long 有什么问题。
#define ll long long
没有任何问题(除了您可能会将它与 11
混淆),它完全按照它应该做的去做。
但是,转换为 long long(a)
的转换 ll(a)
无效(此形式不允许有空格)。
您需要使用 (ll)a
,它变成 (long long)a
。
我应该提一下,使用类型定义而不是 #define
语句会更好。那将是以下之一:
typedef long long ll
using ll = long long;
请记住,#define
执行文本替换。你最终得到这个:
maxi = max(maxi, maxi * long long(a));
这是无效的,因为粗略地说,功能转换的类型名称不能在顶层包含空格。因此,unsigned int(a)
、long double(a)
等都出于同样的原因无效。
解决方案是使用 using
而不是 #define
:
using ll = long long;
或执行 (ll)a
,因为在这种情况下允许使用空格。
但如果我是你,我会去掉 ll
并使用 (long long)a
,因为 ll
是一个相当 non-descriptive 的名字。
请注意,#define ll long long
是对宏的误用,并且由于多种原因而变得糟糕:
令人困惑。从看到 ll maxi = 1;
,一个有理智的人会期望 ll
是一个类型,而 ll(a)
可以工作。如果它不是宏,它也能工作。
短名称可能与事物冲突。如果您将此 #define
放在 header 中,然后包括另一个使用 ll
一词的 header 用于任何目的,它就会崩溃。
为避免这种情况,宏的名字应该很长 ALL_CAPS。
宏应该是最后一个核选项,在其他一切都失败时使用,而不仅仅是当你不想输入一些额外的字母时。
这是你在竞争性编程网站上看到的东西,但如果你在实际工作中尝试这样做,任何理智的代码审查都会失败。
记住类型转换方法,首先我们必须先用大括号写类型名,然后像这样写变量(int)a
。
在你的代码中,你误用了 macros.You 必须先写关键字,然后再写你想像这样调用关键字的东西 #define long long ll
然后你可以使用 long long
作为ll
。这就是您的代码存在的所有问题。
#include <iostream>
using namespace std;
#define ll long long
int main() {
int a = 5;
ll maxi = 1;
maxi = max(maxi, maxi * ll(a));
cout<<maxi<<endl;
return 0;
}
为什么这段代码会抛出错误?我不明白 #define ll long long 有什么问题。
#define ll long long
没有任何问题(除了您可能会将它与 11
混淆),它完全按照它应该做的去做。
但是,转换为 long long(a)
的转换 ll(a)
无效(此形式不允许有空格)。
您需要使用 (ll)a
,它变成 (long long)a
。
我应该提一下,使用类型定义而不是 #define
语句会更好。那将是以下之一:
typedef long long ll
using ll = long long;
请记住,#define
执行文本替换。你最终得到这个:
maxi = max(maxi, maxi * long long(a));
这是无效的,因为粗略地说,功能转换的类型名称不能在顶层包含空格。因此,unsigned int(a)
、long double(a)
等都出于同样的原因无效。
解决方案是使用 using
而不是 #define
:
using ll = long long;
或执行 (ll)a
,因为在这种情况下允许使用空格。
但如果我是你,我会去掉 ll
并使用 (long long)a
,因为 ll
是一个相当 non-descriptive 的名字。
请注意,#define ll long long
是对宏的误用,并且由于多种原因而变得糟糕:
令人困惑。从看到
ll maxi = 1;
,一个有理智的人会期望ll
是一个类型,而ll(a)
可以工作。如果它不是宏,它也能工作。短名称可能与事物冲突。如果您将此
#define
放在 header 中,然后包括另一个使用ll
一词的 header 用于任何目的,它就会崩溃。为避免这种情况,宏的名字应该很长 ALL_CAPS。
宏应该是最后一个核选项,在其他一切都失败时使用,而不仅仅是当你不想输入一些额外的字母时。
这是你在竞争性编程网站上看到的东西,但如果你在实际工作中尝试这样做,任何理智的代码审查都会失败。
记住类型转换方法,首先我们必须先用大括号写类型名,然后像这样写变量(int)a
。
在你的代码中,你误用了 macros.You 必须先写关键字,然后再写你想像这样调用关键字的东西 #define long long ll
然后你可以使用 long long
作为ll
。这就是您的代码存在的所有问题。