6

今天我尝试了一个我前段时间开发的项目。当它遇到编译错误时我很惊讶,因为我已经使用 g++ 成功编译了我的项目。

这个简短的片段重现了遇到错误的行:

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

这会产生此错误:

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

如您所见,有一个不平衡的括号。有三个“(”和两个“)”。这显然看起来应该实际上会产生编译错误。

这是 this 关键字的有效用法吗?我似乎在文档上找不到任何表明它的东西。

我正在使用 g++ 4.5.2 和 clang 2.8。

请注意,当使用 gcc 而不是 g++ 时会检测到此错误。

4

1 回答 1

3

这将是一个编译器错误。编译器看到__attribute__后面跟着两个左括号,一些其他标记,然后是两个右括号,这可能是 an__attribute__应该是什么样子的“定义”,例如

<属性> ::=__attribute__ '(('某物'))'

我的猜测是,两者之间的标记被解释为aligned(16并且奇迹般地它仍然有效。

于 2012-05-16T03:16:29.490 回答