我不明白为什么以下代码无法编译:
#include <iostream>
#define SHORT_NAME 4;
int func(int arg)
{
return arg;
}
int main()
{
return func(SHORT_NAME); // Error: expected a ')'
}
我应该在第2行使用const int SHORT_NAME = 4
吗?
答案 0 :(得分:6)
从宏SHORT_NAME
中删除分号,因为预处理后它会扩展为:
return func(4;);
或者按照您在问题中的建议使用const int
。有关宏与const
的讨论,请参阅"static const" vs "#define" vs "enum"。
答案 1 :(得分:2)
预处理器扩展了MACRO名称。所以这个:
return func(SHORT_NAME);
成为这个:
return func(4;);
这绝对是语法错误,不是吗?
因此,如果您定义不带;
的MACRO,那么它将起作用:
#define SHORT_NAME 4 //without ;
我应该在第2行使用const int SHORT_NAME = 4吗?
YES。去吧。无论如何(在大多数情况下)宏都是邪恶的。
答案 2 :(得分:2)
您的定义中不需要分号。写这个
#define SHORT_NAME 4
但在使用C ++时,使用const int
绝对是更好的选择。