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

标签 c++ c gcc compiler-errors

今天我在前段时间开发的一个项目上尝试了 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/

相关文章:

c - gdb x 命令的 c 格式输出

c - SIP 客户端不接受响应

c - 理解为 gcc 编写的 asm block

gcc 编译标志

c++ - 如果用户在没有输入的情况下点击 Enter,则无法找到产生错误的方法

c++ - 如何允许用户输入数组索引以及数组的值?

c++ - C++ iostream 的自定义操纵器

c - 动态分配结构数组

c++ - "- </dev/null"中的 "gcc -dM -E - </dev/null"是什么意思?

c++ - Bjarne Stroustrup 的 P :PP Chapter 4 Drill