现代编译器支持Gnu语句表达式(C和C++语言)。我应该使用什么版本的语句表达式?
语句表达式类似于({ code; code; retval })
int b=56;
int c=({int a; a=sin(b); a;});我已经认识一些这样的编译器:
这个编译器似乎不支持这个(我不确定):
PS。有些C/C++编译器列出了这里,但我只对广泛使用的成熟编译器感兴趣(例如,不是tcc或turbo )。
发布于 2011-10-08 11:54:59
PathScale EKOPath编译器套件
它支持gnu99和"−std=gnu99“
发布于 2013-01-07 09:40:24
英特尔C++编译器不支持语句表达式,甚至不支持我所知道的最后一个版本13.0。
发布于 2013-01-17 15:36:42
正如我在上一个答复的评论中所说的,Intel编译器确实支持声明表达式。但是在C++中,英特尔对GNU扩展的仿真还没有完成。以下代码摘自CGAL-4.0 (http://www.cgal.org/):
#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/
https://stackoverflow.com/questions/6440021
复制相似问题