我正在尝试将项目从旧的Linux平台移动到kubunutu 9.04。现在,在使用gcc 4.3.3编译时出现此错误:
/usr/src/linux-headers-2.6.28-11-generic/include/linux/cpumask.h:600:37: error: "and" may not appear in macro parameter list
如果我理解正确的消息,则不允许使用“和”作为宏参数,因为它是“保留命令”。关于这两个问题:
感谢您的帮助。
答案 0 :(得分:1)
linux标头是C标头,而不是C ++。
答案 1 :(得分:1)
我认为问题在于and
是keyword in C++ but not C(他们使用&&
)。
内核人员有时会将宏作为内联函数的替代品。但是,有时它们需要宏,因为他们想要做的事情必须在调用函数的范围内完成,并且定义一个函数来完成它将不起作用(例如,一个宏来查找当前函数的名称) )。
假设有问题的宏真的是伪内联函数,那么就可以编写自己的.c文件,除了调用这些宏的函数,编译它,并通过extern "C"
标题引用这些函数。你会得到相同的行为,但性能稍差(这不太可能是一个问题)。
如果宏实际上必须是宏,那么最好的办法是将它们编辑为C ++兼容。
答案 2 :(得分:0)
如果您还显示相关行,这将有所帮助。也许这完全取决于上下文,如果你在包含标题之前做了一些疯狂的事情,编译器可能会混淆并生成一个非显而易见的错误消息。
有些情况下“和”确实是一个保留字,如果它是C ++ - 只有内核开发人员不会太在意,因为内核专注于C语言。
答案 3 :(得分:0)