我有一些我正在维护的代码,我已经开始在 clang 3.3 下编译。使用“-std=c++11”编译时,clang 会产生错误(如下所示)。我将有问题的代码提炼为以下内容:
#include <stdio.h>
#define DBG_PRT(__format, ...) \
printf("%s:%d:%s: "__format, __FILE__, \
__LINE__, __FUNCTION__, ## __VA_ARGS__)
int main()
{
DBG_PRT("%s\n", "Hi");
}
这是clang的输出:
test.cpp:10:5: 错误:没有匹配的文字运算符用于调用具有类型 'const char *' 和 'unsigned int' 的参数的 'operator "" __format'
DBG_PRT("%s\n", "Hi"); ^ test.cpp:4:29: note: expanded from macro 'DBG_PRT' printf("%s:%d:%s: "__format, __FILE__, \ ^ 1 error generated.
如果字符串文字和“__format”之间没有空格,预处理器似乎不能扩展__format。但是,当不指定 -std=c++11 时,它显然是。G++ 4.4.7(有和没有 -std=c++0x)编译得很好。
编译器有错误吗?