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

GCC中是否支持多行宏

  •  1
  • goldenmean  · 技术社区  · 16 年前

    gcc版本3.2.4是否支持多行宏(可编译)。我正在尝试使用上述gcc版本在linux主机上构建具有多行宏的源代码。 我在宏中得到编译错误,这是多行的。

          #define YYCOPY(To, From, Count)       \
          do                    \
         {                  \
           YYSIZE_T yyi;                \
           for (yyi = 0; yyi < (Count); yyi++)  \
             (To)[yyi] = (From)[yyi];       \
         }                  \
          while (0)
    

    非常感谢。

    2 回复  |  直到 16 年前
        1
  •  3
  •   ergosys    16 年前

    反斜杠继续宏是标准的预处理器。检查反斜杠后是否有多余的空格或其他不可见字符。

        2
  •  2
  •   Adam Rosenfield    16 年前

    ANSI C规范要求编译器支持这一点——具体来说,该标准规定,如果一行在换行符之前以反斜杠结束,则预处理器将该行和后续行视为一个逻辑行,就像反斜杠和换行符都不存在一样。如果预处理器不这样做,则它不是合格的预处理器(或者更严格地说,是 ,正如标准所称)。

    GCC力求尽可能符合ANSI C标准。是的,它支持在行尾使用反斜杠定义的多行宏。

    出现编译器错误的原因是其他原因。您没有正确使用宏。如果没有发布您收到的确切错误消息和调用宏的代码,就不可能说出您做错了什么。