首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GNU语句表达式的编译器支持

GNU语句表达式的编译器支持
EN

Stack Overflow用户
提问于 2011-06-22 12:42:52
回答 3查看 4.9K关注 0票数 27

现代编译器支持Gnu语句表达式(C和C++语言)。我应该使用什么版本的语句表达式?

语句表达式类似于({ code; code; retval })

代码语言:javascript
复制
int b=56;
int c=({int a; a=sin(b); a;});

我已经认识一些这样的编译器:

  • GCC >=3
  • Clang/LLVM >= 3.0.0
  • 英特尔C++编译器>= 6.0 (Linux,检查第4页;bit 有限)
  • Studio >= 12 (新语言扩展)
  • IBM /OS (标记为IBM扩展)
  • Open64 (因为它使用的是奥斯普罗-gcc的正面)

这个编译器似乎不支持这个(我不确定):

  • MS视觉C++

PS。有些C/C++编译器列出了这里,但我只对广泛使用的成熟编译器感兴趣(例如,不是tcc或turbo )。

EN

回答 3

Stack Overflow用户

发布于 2011-10-08 11:54:59

PathScale EKOPath编译器套件

它支持gnu99和"−std=gnu99

票数 2
EN

Stack Overflow用户

发布于 2013-01-07 09:40:24

英特尔C++编译器不支持语句表达式,甚至不支持我所知道的最后一个版本13.0。

票数 1
EN

Stack Overflow用户

发布于 2013-01-17 15:36:42

正如我在上一个答复的评论中所说的,Intel编译器确实支持声明表达式。但是在C++中,英特尔对GNU扩展的仿真还没有完成。以下代码摘自CGAL-4.0 (http://www.cgal.org/):

代码语言:javascript
复制
#include <cassert>

struct A {
  int* p;

  A(int i) : p(new int(i)) {}
  ~A() { delete p; }
  int value() const { return *p;}
};

int main()
{
  int i = __extension__ ({ int j = 2; j+j; });
  assert(i == 4);

  // The Intel Compiler complains with the following error:
  // "error: destructible entities are not allowed inside of a statement
  // expression"
  // See http://software.intel.com/en-us/articles/cdiag1487/
  i = __extension__ ({ A a(2); A b(3); a.value() + b.value(); });

  assert(i == 5);
  return 0;
}

代码中的注释甚至给出了Intel编译器返回的错误,该编译器使用version 11、12或13进行了测试。

http://software.intel.com/en-us/articles/cdiag1487/

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

https://stackoverflow.com/questions/6440021

复制
相关文章

相似问题

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