5

私は、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 の有無にかかわらず) は問題なくコンパイルされます。

コンパイラにエラーはありますか?

4

1 に答える 1