2011-06-22 4 views
20

Gnuステートメント式(CおよびC++言語)をサポートする最新のコンパイラはどれですか。ステートメント表現を使用するには、どのバージョンを使用する必要がありますか?GNUステートメント表現のコンパイラサポート

文の表現は({ code; code; retval })のようになめらかである:

int b=56; 
int c= ({int a; a=sin(b); a}) 

私はすでにそのようないくつかのコンパイラを知っている:

このコンパイラは、(私はわからないよ)これをサポートしていないようです:

  • MS Visual C++

PS。いくつかのC/C++コンパイラがhereを記載されているだけで広く使用されている成熟したコンパイラ、中に私は興味を持っている(例えばないTCCまたはターボC)

答えて

1

でgnu99をサポートインテル®C++コンパイラーは、私が知っている最後のバージョンであっても、バージョン13.0のステートメント表現をサポートしていません。

+1

しかし、[ページ](http://software.intel.com/sites/products/documentation/hpc/composerxe/en-us/2011Update/cpp/lin/bldaps_cls/ common/bldaps_gcc_compat_comm.htm)は次のように述べています。*文の式はサポートされていますが、その中で以下が禁止されています:* ".. [this、page4](http://scc.ustc.edu.cn/zlsc/lenovo_1800/200910 /W020100308600680463493.pdf)はそれが真実だと言いますeインテル®C++コンパイラー・バージョン6.0 – osgx

+0

あなたは正しいです。私はより良い答えをします。 – lrineau

0

私の前回の回答のコメントにあるように、インテル®コンパイラーはステートメントの式をサポートしています。しかし、そのGNU拡張のIntelによるエミュレーションは、C++では完全ではありません。

#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; 
} 

もバージョン11でテストインテルコンパイラによって返されたエラーを与えるコードにコメント、12:次のコードはCGAL-4.0(http://www.cgal.org/)から取得され、又は13

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

関連する問題