在g ++中使用__attribute__的不平衡括号

时间:2012-05-16 02:52:43

标签: c++ c gcc compiler-errors

今天我尝试了一下我前段时间开发的项目。当遇到编译错误时我感到很惊讶,因为我使用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 ++时会检测到此错误。

1 个答案:

答案 0 :(得分:3)

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

  

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

我的猜测是,两者之间的代币被解释为aligned(16,并且通过一些奇迹它仍然有效。