将define int传递给函数作为参数

时间:2012-12-13 10:46:33

标签: c++ arguments c-preprocessor

我不明白为什么以下代码无法编译:

#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吗?

3 个答案:

答案 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绝对是更好的选择。