GNU/Linux >> Linux の 問題 >  >> Linux

指定されたイニシャライザが g++ に実装されていないのはなぜですか

コメントで指摘したように、G++ は C99 標準の指定された初期化子をサポートしていませんが、指定された初期化子を許可する C90 の GNU 拡張機能をサポートしています。したがって、これは機能しません:

union value_t {
    char * v_cp;
    float v_f;
};
union value_t my_val = { .v_f = 3.5f };

しかし、これは:

union value_t my_val = { v_f: 3.5f };

これは、C と C++ の標準化委員会 (C++ が C99 構文をサポートしない理由は特になく、単に考慮していないだけです) と GCC の政治 (C++ はC99にあるという理由だけでC99構文をサポートしませんが、どちらの言語にも適用できるGNU拡張であるため、まったく同じことを実現するGNU拡張構文をサポートする必要があります)。


今日も同じ問題に遭遇しました。 g++ with -std=c++11 および c++14 は指定された初期化子をサポートしますが、コンパイル エラー "test.cxx:78:9:申し訳ありませんが、実装されていません:非自明な指定された初期化子がサポートされていません" が発生する可能性があります。メンバーが定義された順序で構造体を初期化しないでください。例として

struct x
{
    int a;
    int b;
};

// This is correct
struct x x_1 = {.a = 1, .b = 2};
// This will fail to compile with error non-trivial designated initializer
struct x x_2 = {.b = 1, .a = 2};

Linux
  1. なぜCdはプログラムではないのですか?

  2. Linux –なぜSuだけでなくSuを使用するのですか?

  3. Nullglobがデフォルトではないのはなぜですか?

  1. Linux –Setuidが機能しないのはなぜですか??

  2. 一部のポートがNmapによって報告され、他のポートはフィルタリングされないのはなぜですか?

  3. なぜ`exit&`が機能しないのですか?

  1. Unix / linuxでディレクトリへのハードリンクが許可されていないのはなぜですか?

  2. なぜRm-rfであり、Rmdir -rfではないのですか?

  3. bash履歴を削除するだけでは不十分なのはなぜですか?