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

mfo*_*ini 6 c c++ gcc compiler-errors

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

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

int main() {
    __attribute__((aligned(16)) char arr[5];
}
Run Code Online (Sandbox Code Playgroud)

哪会产生这个错误:

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

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

这是此关键字的有效用法吗?我似乎无法在文档中找到任何表明它的内容.

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

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

dre*_*lax 3

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

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

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

  • 这可能不是一个错误,在我看来,这是因为不平衡的括号几乎不是你想要的,但如果 GCC 允许任何类型的标记出现在 `((` 和 `))` 中,那么它可能不会被认为是漏洞。尝试 `__attribute__(( ( ( ( ( ( )))` 并查看是否抱怨未知属性而不是不平衡的括号。 (2认同)