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
答案 0 :(得分:3)
反斜杠继续宏是标准的预处理器。反斜杠后检查额外的空格或其他不可见的字符。
答案 1 :(得分:2)
ANSI C规范要求编译器支持这一点 - 具体而言,标准说如果一行以紧接在换行符之前的反斜杠结尾,则预处理器将该行和后续行视为一条逻辑行,就好像反斜杠和换行都不存在。如果预处理器没有这样做,那么它不是一个符合要求的预处理器(或者在技术上更像是一个翻译器,正如标准所称的那样)。
GCC努力尽可能符合ANSI C标准。是的,它支持在行尾用反斜杠定义的多行宏。
您遇到编译器错误的原因是其他原因。你没有正确使用宏。如果没有发布您收到的确切错误消息以及调用宏的代码,就无法说出您做错了什么。