首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在使用clang -std=gnu++11时会编译此C++代码?

为什么在使用clang -std=gnu++11时会编译此C++代码?
EN

Stack Overflow用户
提问于 2012-08-31 17:35:16
回答 1查看 731关注 0票数 8

这是在使用clang -std=gnu++11 -c test.cpp时编译的

代码语言:javascript
复制
void test() {
    [[random text here]]
    if (0) {
    }
}

但是这会给出错误main.cpp:3:1: error: expected statement

代码语言:javascript
复制
void test() {
    [[random text here]]
}

如果我使用clang -std=gnu++11 -S -emit-llvm main.cpp编译并查看LLVM代码,那么[[...]]行看起来没有任何效果:

代码语言:javascript
复制
define void @_Z5testv() nounwind uwtable ssp {
  ret void
}

你知道为什么吗?bug或某些C++11语法或GNU扩展语法?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-31 18:12:56

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

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

实现支持的属性集是由实现定义的(而Clang不支持任何属性。实际上,它显然根本不应该支持属性语法( according to the website)。不是由特定实现实现的属性应该被忽略,这就是它没有效果的原因。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12212678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档