8

これは、次を使用するとコンパイルされますclang -std=gnu++11 -c test.cpp

void test() {
    [[random text here]]
    if (0) {
    }
}

しかし、これはエラーになりますmain.cpp:3:1: error: expected statement:

void test() {
    [[random text here]]
}

コンパイルしclang -std=gnu++11 -S -emit-llvm main.cppて LLVM コードを見ると、次の[[...]]行は効果がないように見えます。

define void @_Z5testv() nounwind uwtable ssp {
  ret void
}

理由はありますか?バグまたは一部の C++11 構文または GNU 拡張構文?

Xcode 4.4.1 (Apple clang バージョン 4.0 (tags/Apple/clang-421.0.60) (LLVM 3.1svn に基づく)) の clang を使用しています。

4

1 に答える 1

10

これは C++11 の属性構文を使用しています。したがって、 " random text here" は属性であると見なされます。C++11 仕様により、属性は多くのステートメントと宣言を変更できます。

属性はステートメントにすることができますが、実際にはステートメントでなければなりません。;つまり、他の多くの C++ ステートメントと同様に終了します。

実装によってサポートされる属性のセットは、実装によって定義されます (そして、Clang はいずれもサポートしません。実際、Web サイトによると、属性構文をまったくサポートすることは想定されていないようです)。特定の実装によって実装されていない属性は無視する必要があるため、効果がありません。

于 2012-08-31T10:12:55.593 に答える