在C和C ++中,我可以使用包含空格的宏定义吗?

时间:2010-06-25 08:44:49

标签: c++ c macros

我想知道宏定义是否可以包含空格。我们以此代码为例:

#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进行项目,我正在尝试制作一些可重入的东西(我需要为函数参数声明一些宏)。

4 个答案:

答案 0 :(得分:6)

你需要用\(除了最后一行)结束定义的每一行。

答案 1 :(得分:3)

是的,在任何符合远程的编译器中,您当然可以对预处理器宏进行多字(实际上是多行)扩展。 C宏非常讨厌,但如果他们甚至不能这样做,那么它们基本上是无用的。

预处理器语法可以做很多事情(足够容易被滥用)。如果您需要或需要合法的章节和经文,请参阅标准ISO-9899(PDF)的6.10.3节。

答案 2 :(得分:2)

是的,你可以这样做。

答案 3 :(得分:2)

是的,您可以依赖此行为。