是否支持GCC中的多行宏

时间:2010-01-20 04:55:47

标签: gcc macros multiline

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)

如果它们不受支持,为什么解决这个问题,将宏转换为函数或其他一些编译器选项可以提供帮助?

谢谢。

-AD

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

ANSI C规范要求编译器支持这一点 - 具体而言,标准说如果一行以紧接在换行符之前的反斜杠结尾,则预处理器将该行和后续行视为一条逻辑行,就好像反斜杠和换行都不存在。如果预处理器没有这样做,那么它不是一个符合要求的预处理器(或者在技术上更像是一个翻译器,正如标准所称的那样)。

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

您遇到编译器错误的原因是其他原因。你没有正确使用宏。如果没有发布您收到的确切错误消息以及调用宏的代码,就无法说出您做错了什么。