Joh*_*ohn 4 c++ g++ c++11 clang++
我有一些代码我维护我已经开始在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");
}
Run Code Online (Sandbox Code Playgroud)
这是铿锵的输出:
test.cpp:10:5:错误:没有匹配的文字运算符用于调用'operator'"__ format",参数类型为'const char*'和'unsigned int'
Run Code Online (Sandbox Code Playgroud)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)编译得很好.
编译器有错误吗?
小智 8
这是因为""_是用户定义的字符串文字的语法.在它们之间放置一个空格以具有旧行为(连接文字).GCC工作正常,因为4.4.7没有实现用户定义的文字(它出现在4.7版本中).
另外,正如@Fred指出的那样,尽量避免使用保留标识符(双下划线).
| 归档时间: |
|
| 查看次数: |
1420 次 |
| 最近记录: |