今天我在前段时间开发的一个项目上尝试了 clang。当它遇到编译错误时我很惊讶,因为我已经使用 g++ 成功编译了我的项目。
这个简短的片段重现了遇到错误的行:
int main() {
__attribute__((aligned(16)) char arr[5];
}
产生此错误的原因:
test.cpp:2:32: error: expected ')'
__attribute__((aligned(16)) char arr[5];
^
)
如您所见,有一个不平衡的括号。有三个“(”和两个“)”。这显然看起来应该会产生编译错误。
这是该关键字的有效用法吗?我似乎无法在 the documentation 上找到任何内容这表明它是。
我使用的是 g++ 4.5.2 和 clang 2.8。
请注意,当使用 gcc 而不是 g++ 时会检测到此错误。
最佳答案
这将是一个编译器错误。编译器看到 __attribute__
后跟两个左括号,一些其他标记,然后是两个右括号,这可能是 __attribute__
应该是什么样子的“定义”,例如
<attribute> ::=
__attribute__
'(('
something'))'
我的猜测是中间的标记被解释为 aligned(16
并且奇迹般地它仍然有效。
关于c++ - 在 g++ 中使用 __attribute__ 的不平衡括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10611400/