GNU/Linux >> Znalost Linux >  >> Linux

Proč nejsou určené inicializátory implementovány v g++

Jak jsem poznamenal v komentáři, G++ nepodporuje inicializátory určené standardem C99, ale podporuje rozšíření GNU na C90, které umožňuje určené inicializátory. Takže to nefunguje:

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

Ale tohle:

union value_t my_val = { v_f: 3.5f };

Zdá se, že jde o špatnou interakci koordinace mezi výbory pro standardy C a C++ (neexistuje žádný zvlášť dobrý důvod, proč C++ nepodporuje syntaxi C99, jen to nezvážili) a politikou GCC (C++ by nemělo t podporuje syntaxi C99 jen proto, že je v C99, ale měla by podporovat syntaxi rozšíření GNU, která dosahuje přesně toho samého, protože jde o rozšíření GNU, které lze aplikovat na oba jazyky).


Dnes jsem narazil na stejný problém. g++ s -std=c++11 a c++14 podporuje určené inicializátory, ale přesto se může zobrazit chyba kompilace „test.cxx:78:9:pardon, neimplementováno:netriviální určené inicializátory nejsou podporovány“, pokud neinicializujte strukturu v pořadí, v jakém jsou její členové definováni. Jako příklad

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. Proč není Nullglob výchozí?

  2. Linux – Proč Setuid nefunguje?

  3. Proč jsou některé porty hlášeny Nmapem filtrovány a ostatní ne?

  1. Proč „ukončit &“ nefunguje?

  2. Proč je to Rm -rf a ne Rmdir -rf?

  3. Proč používáme su – a nejen su?

  1. Proč není CD program?

  2. Proč jsou soubory .so spustitelné?

  3. Proč neblokovat ICMP?