使用clang -std=gnu++11 -c test.cpp
时编译:
void test() {
[[random text here]]
if (0) {
}
}
但这会导致错误main.cpp:3:1: error: expected statement
:
void test() {
[[random text here]]
}
如果我使用clang -std=gnu++11 -S -emit-llvm main.cpp
进行编译并查看LLVM代码,则看起来[[...]]
行无效:
define void @_Z5testv() nounwind uwtable ssp {
ret void
}
任何想法为什么? bug或一些C ++ 11语法或GNU扩展语法?
我正在使用Xcode 4.4.1中的clang(Apple clang 4.0版(标签/ Apple / clang-421.0.60)(基于LLVM 3.1svn)。
答案 0 :(得分:10)
这是使用C ++ 11的属性语法。因此,“random text here
”被假定为属性。根据C ++ 11规范,属性可以修改许多语句和声明。
属性可以是语句,但它们实际上必须是语句。这意味着它们以;
结尾,就像许多其他C ++语句一样。
实现支持的属性集是实现定义的(并且Clang不支持任何属性。实际上,它显然不应该支持属性语法,according to the website)。应忽略特定实现未实现的属性,这就是它没有效果的原因。