我正在用gcc 4.7.0编译我的代码。我的代码用4.6.1编译好。但是对于4.7.0,它显示:
unable to find string literal operator ?operator"" PRIxPTR?
我已经包含了正确的inttypes.h文件。如果我试图重新定义它,它会抱怨已经定义了它。
这是错误的代码:
printf("%016"PRIxPTR" ", addr);
您能告诉解决方案/解决方法吗?感谢。
答案 0 :(得分:10)
在PRIxPTR之前添加一个空格:
printf("%016" PRIxPTR" ", addr);
// ^
原因是自gcc 4.7以来,在C ++ 11模式下支持user-defined literals。一个结果是"%016"PRIxPTR
不再是两个单独的标记,并且可以定义(尽管GCC不允许)用户定义的文字来做一些奇怪的事情,例如。
size_t operator"" PRIxPTR(const char* input) { return strlen(input); }
(如果您不使用C ++ 11模式但遇到此错误,请向GCC发布错误。)