2012-04-02 9 views
4

gcc 4.7.0で自分のコードをコンパイルしています。私のコードは4.6.1でうまくコンパイルされます。しかし、4.7.0では、次のように表示されます。PRIxPtrが認識されない

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

適切なinttypes.hファイルが含まれています。これを再定義しようとすると、すでに定義されていると不平を言います。ここで

は身を誤ったコードです:

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

あなたが解決策/回避策を教えてください。ありがとう。

答えて

9

はPRIxPTRの前にスペースを追加します。

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

理由はgcc 4.7以来、user-defined literalsはC++ 11モードでサポートされていることです。 1つの結果として、"%016"PRIxPTRはもはや2つの別々のトークンではなく、(GCCはそれを認めていないが)ユーザ定義のリテラルを定義して奇妙なことを行うことができる。

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

(あなたがC++ 11のモードを使用してではありませんが、このエラーが発生した場合は、GCCにバグを投稿してください。)

関連する問題