6

今日、私は少し前に開発したプロジェクトでclangを試しました。g++ を使用してプロジェクトを正常にコンパイルしたので、コンパイル エラーが発生したときは驚きました。

この短いスニペットは、エラーが発生した行を再現しています。

int main() {
    __attribute__((aligned(16)) char arr[5];
}

このエラーが発生します:

test.cpp:2:32: error: expected ')'
    __attribute__((aligned(16)) char arr[5];
                               ^
                               )

ご覧のとおり、アンバランスな括弧があります。3 つの「(」と 2 つの「)」があります。これは、実際にはコンパイル エラーが発生するように見えます。

これは、このキーワードの有効な使用法ですか? それがそうであることを示すドキュメントは何も見つかりません。

g++ 4.5.2 と clang 2.8 を使用しています。

g++ の代わりに gcc を使用すると、このエラーが検出されることに注意してください。

4

1 に答える 1

3

これはコンパイラのバグになります。コンパイラーは__attribute__、2つの開き括弧、他のいくつかのトークン、2つの閉じ括弧が続きます。これは、おそらく、がどの__attribute__ように見えるかの「定義」です。

<属性>::=__attribute__ '(('何か'))'

私の推測では、その間のトークンは、aligned(16いくつかの奇跡として解釈されており、それでも機能します。

于 2012-05-16T03:16:29.490 に答える