我想知道宏定义是否可以包含空格。我们以此代码为例:
#define MACRO_PARAM int param2
int function(int param1, MACRO_PARAM)
{
return param1+param2;
}
这适用于Visual Studio 8和gcc 3.4.5(mingw)。对我来说这暂时还不错,但这是标准吗?或者我可以在不同的编译器中依赖这种行为吗?
谢谢,
尤利安
PS:回答问题why would you wanna do that?
:我正在使用bison flex进行项目,我正在尝试制作一些可重入的东西(我需要为函数参数声明一些宏)。
答案 0 :(得分:6)
你需要用\(除了最后一行)结束定义的每一行。
答案 1 :(得分:3)
是的,在任何符合远程的编译器中,您当然可以对预处理器宏进行多字(实际上是多行)扩展。 C宏非常讨厌,但如果他们甚至不能这样做,那么它们基本上是无用的。
预处理器语法可以做很多事情(足够容易被滥用)。如果您需要或需要合法的章节和经文,请参阅标准ISO-9899(PDF)的6.10.3节。
答案 2 :(得分:2)
是的,你可以这样做。
答案 3 :(得分:2)
是的,您可以依赖此行为。