2014-11-02 78 views
6

未声明的变量的抱怨我使用相同的源文件中定义为宏:编译器在宏

#define MY_MACRO (a, b,...) (...) 

宏被在文件中以后使用。

然而,编译器会抱怨:

错误:一个未申报(在此函数第一次使用)。

这真的很奇怪..我错过了一些明显的东西?

+3

请显示一个简单的例子。 – 2501 2014-11-02 16:36:10

+3

如果您想要一个函数宏,参数列表的括号必须立即跟随宏名称,而没有空格。因为你已经定义了一个简单的替换,其中'MY_MACRO'被扩展为'(a,b,...)(...)',这可能不是你想要的。你可以用一个开关gcc中的'-E')显示预处理输出以帮助您跟踪这些问题。 – 2014-11-02 16:36:34

+0

@Meehm:就是这样!谢谢! – Iceman 2014-11-02 16:39:02

回答

12

我认为问题是在MY_MACRO(a, b, ...)之间有一个空格。它应该是这样的:

#define MY_MACRO(a, b,...) (...) 
5

删除宏名称和参数列表之间的空格。空格将宏头与主体分开,因此它被视为一个没有参数的宏,它扩展到期望的参数列表,然后是所需的主体。