2012-04-02 80 views
4

我使用gcc 4.7.0编译我的代码。我的代码用4.6.1编译得很好。但是,使用4.7.0时,它显示:PRIxPtr not recognized

unable to find string literal operator ?operator"" PRIxPTR? 

我已经包含正确的inttypes.h文件。如果我试图重新定义它,它会抱怨它已经被定义。

这是犯错误的代码:

printf("%016"PRIxPTR" ", addr); 

你能告诉该解决方案/解决方法吗?谢谢。

回答

9

的PRIxPTR之前添加空间:

printf("%016" PRIxPTR" ", addr); 
//   ^

的原因在于,由于gcc 4.7user-defined literals被支撑在C++ 11模式。一个结果是"%016"PRIxPTR不再是两个单独的标记,并且可以定义(尽管GCC不允许)用户定义的文字来做一些奇怪的事情,例如

size_t operator"" PRIxPTR(const char* input) { return strlen(input); } 

(如果您是使用C++ 11模式,但遇到这样的错误,请至GCC的错误。)