【发布时间】:2012-05-16 02:52:43
【问题描述】:
今天我在我前段时间开发的一个项目上尝试了 clang。当它遇到编译错误时我很惊讶,因为我已经使用 g++ 成功编译了我的项目。
这个简短的 sn-p 重现了遇到错误的行:
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++ 时会检测到此错误。
【问题讨论】:
-
gcc documentation 声明 “关键字
__attribute__允许您指定变量或结构字段的特殊属性。此关键字后跟双括号内的属性说明”。所以它并没有用精确的明确的话来说明以相同数量的括号结束,但所有 gcc 示例都显示匹配的括号,所以看起来像一个错误。 -
是的,看起来它实际上是一个错误。我找不到任何可以表明相反的东西。
-
@DavidRodríguez-dribeas clang 支持它。我的意思是,看起来 g++ 确实没有正确解析该表达式。当在这里报告错误时,clang 正在做正确的事情(至少我怀疑是这样......这就是我问 :D 的原因)。
-
我注意到
char arr[5] __attribute__((aligned(16));在 g++ 上给出了正确的编译器错误。
标签: c++ c gcc compiler-errors