1

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)

如果它们不受支持,解决方法是什么,将宏转换为函数或其他一些编译器选项会有所帮助?

谢谢你。

-广告

4

2 回答 2

3

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

于 2010-01-20T05:06:18.493 回答
2

ANSI C 规范要求编译器支持这一点——特别是,该标准规定,如果一行在换行符之前以反斜杠结尾,则预处理器将该行和后续行视为一个逻辑行,就好像两个反斜杠并且换行符不存在。如果一个预处理器不这样做,它就不是一个符合标准的预处理器(或者更专业地说,一个翻译器,正如标准所称的那样)。

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

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

于 2010-01-20T05:52:08.233 回答