• 6696阅读
  • 4回复

[讨论]关于 #define do{}while(0) [复制链接]

上一主题 下一主题
离线青原落枫
 

只看楼主 倒序阅读 楼主  发表于: 2012-09-28
#define errorPrint(format,...)
do
{
    printf("错误:\n");
printf("%s%s,%s([%s]:line:%d\n)",__DATE__,__TIME__,__FILE__,__FUNCTION__,__LINE__);
printf(format,##__VA_ARGS__);
} while (0)



为什么会报以下错误
error C2059: 语法错误 : “do”
error C2143: 语法错误 : 缺少“;”(在“{”的前面)
error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
error C2014: 预处理器命令必须作为第一个非空白空间启动
error C2059: 语法错误 : “while”
error C2143: 语法错误 : 缺少“;”(在“{”的前面)
error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
离线kimtaikee

只看该作者 1楼 发表于: 2012-09-28
#define errorPrint(format,...) \
                            do \
                            {     \
                                   printf("错误:\n");  \
                                   printf("%s%s,%s([%s]:line:%d\n)",__DATE__,__TIME__,__FILE__,__FUNCTION__,__LINE__);  \
                                   printf(format,##__VA_ARGS__);  \
                             } while (0);



离线青原落枫

只看该作者 2楼 发表于: 2012-09-29
回 1楼(kimtaikee) 的帖子
朋友,请问为什么每句话的后面得加反斜杠啊
离线0xffffh

只看该作者 3楼 发表于: 2012-09-29
宏定义本身是不能跨行的,末尾的‘\’表该行没完。书没好好读啊!
离线xlttap

只看该作者 4楼 发表于: 2012-09-29
一看就知道你没有加"\", "\"表示后面的内容和前面的是在同一行, 只不过为了代码好看, 写在另一行。这么基本的问题都不知道。 一看就知道你平时很少去看QT中.pro文件的内容, 或者是看了不去想里面的写法。
我简单我快乐
快速回复
限100 字节
 
上一个 下一个