代码之家  ›  专栏  ›  技术社区  ›  INS

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

  •  2
  • INS  · 技术社区  · 15 年前

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

    #define MACRO_PARAM int param2
    
    int function(int param1, MACRO_PARAM)
    {
        return param1+param2;
    }
    

    这与Visual Studio 8和GCC 3.4.5(mingw)一起工作正常。对我来说,目前这已经足够好了,但这是标准吗?或者我可以在不同的编译器中依赖这种行为吗?

    谢谢,

    尤利安

    附:回答问题 why would you wanna do that? :我正在为一个项目使用bison-flex,我正试图使一些东西可重入(我需要为函数参数声明一些宏)。

    4 回复  |  直到 15 年前
        1
  •  5
  •   Brian Hooper    15 年前

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

        2
  •  3
  •   Norman Gray    15 年前

    是的,在任何与远程兼容的编译器中,都可以将多个单词(实际上是多行)扩展为预处理器宏。C宏是相当讨厌的,但是如果它们不能做到这一点,它们将基本上是无用的。

    预处理器语法可以做很多工作(足够容易被滥用)。见标准第6.10.3节,ISO-9899( PDF ,如果你想要或需要合法的章节。

        3
  •  2
  •   Daniel Daranas    15 年前

    是的,你能做到。

        4
  •  2
  •   Karl von Moor    15 年前

    是的,你可以依靠这种行为。