【发布时间】:2010-01-20 04:55:47
【问题描述】:
在 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
【问题讨论】:
-
“多行宏”到底是什么意思?
do { ... } while(0)技巧对您不起作用吗? c-faq.com/cpp/multistmt.html -
@goldenmean:你能告诉我们实际的代码吗?你是如何定义你的宏的?
-
@Alok:代码实际上使用通常的 do while 构造实现了这个宏,以避免与分号相关的编译错误:do { ...//宏中的一些语句 ...//宏中还有一些语句 } while(0)
-
@Alok:下面是代码。对不起,如果格式不好:#define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi
-
您也应该告诉我们您遇到的错误。