GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué los inicializadores designados no están implementados en g ++?

Como señalé en un comentario, G++ no es compatible con los inicializadores designados estándar de C99, pero sí es compatible con la extensión GNU para C90, que permite los inicializadores designados. Así que esto no funciona:

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

Pero esto sí:

union value_t my_val = { v_f: 3.5f };

Esto parece ser una mala interacción de coordinación entre los comités de estándares de C y C++ (no hay una razón particularmente buena por la que C++ no admita la sintaxis de C99, simplemente no la han considerado) y la política de GCC (C++ no debería No admite la sintaxis C99 solo porque está en C99, pero debería admitir la sintaxis de la extensión GNU que logra exactamente lo mismo porque es una extensión GNU que se puede aplicar a cualquier idioma).


Me encontré con este mismo problema hoy. g++ con -std=c++11 y c++14 admite inicializadores designados, pero aún puede obtener un error de compilación "test.cxx:78:9:lo siento, no implementado:inicializadores designados no triviales no admitidos" si no inicialice la estructura en el orden en que se han definido sus miembros. Como ejemplo

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. ¿Por qué Nullglob no es predeterminado?

  2. ¿Por qué un largo retraso después de que no se encuentra el comando?

  3. Linux:¿por qué no funciona Setuid?

  4. ¿Por qué algunos puertos informados por Nmap están filtrados y no los demás?

  5. ¿Por qué `exit &` no funciona?

¿Por qué `clear` no borra toda la pantalla?

¿Por qué las interfaces de red no están en /dev como otros dispositivos?

¿Por qué no funciona sftp rmdir?

¿Se implementan los subprocesos como procesos en Linux?

¿Por qué borrar el historial de bash no es suficiente?

¿Por qué algunos modelos de CPU de la familia Intel 6 (Core 2, Pentium M) no son compatibles con intel_idle?