今天我尝试了一下我前段时间开发的项目。当遇到编译错误时我感到很惊讶,因为我使用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 ++时会检测到此错误。
答案 0 :(得分:3)
这将是编译器错误。编译器看到__attribute__
后跟两个开括号,一些其他标记,然后是两个右括号,这可能是__attribute__
应该是什么样的“定义”,例如。
<属性> :: =
__attribute__
'(('
'))'
我的猜测是,两者之间的代币被解释为aligned(16
,并且通过一些奇迹它仍然有效。