8

这在使用时编译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
}

任何想法为什么?错误或某些 C++11 语法或 GNU 扩展语法?

我使用 Xcode 4.4.1 中的 clang(Apple clang 4.0 版(tags/Apple/clang-421.0.60)(基于 LLVM 3.1svn)。

4

1 回答 1

10

这是使用 C++11 的属性语法。因此, “ random text here”被假定为一个属性。根据 C++11 规范,一个属性可以修改许多语句和声明。

属性可以是语句,但它们实际上必须是语句。这意味着它们以;与许多其他 C++ 语句一样的结尾。

实现支持的属性集是实现定义的(Clang 不支持任何属性。事实上,根据网站的说法,它显然根本不应该支持属性语法)。应该忽略特定实现未实现的属性,这就是它没有效果的原因。

于 2012-08-31T10:12:55.593 回答