GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi les initialiseurs désignés ne sont-ils pas implémentés dans g++

Comme je l'ai noté dans un commentaire, G++ ne prend pas en charge les initialiseurs désignés standard C99, mais il prend en charge l'extension GNU vers C90 qui autorise les initialiseurs désignés. Donc ça ne marche pas :

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

Mais ceci ne :

union value_t my_val = { v_f: 3.5f };

Cela semble être une mauvaise interaction de coordination entre les comités de normalisation C et C++ (il n'y a pas de raison particulièrement bonne pour laquelle C++ ne prend pas en charge la syntaxe C99, ils ne l'ont tout simplement pas envisagée) et la politique de GCC (C++ devrait ' ne prend pas en charge la syntaxe C99 simplement parce qu'elle est en C99, mais elle devrait prendre en charge la syntaxe d'extension GNU qui réalise exactement la même chose car il s'agit d'une extension GNU qui peut être appliquée à l'une ou l'autre langue).


J'ai rencontré ce même problème aujourd'hui. g++ avec -std=c++11 et c++14 prend en charge les initialiseurs désignés, mais vous pouvez toujours obtenir une erreur de compilation "test.cxx:78:9:désolé, non implémenté :les initialiseurs désignés non triviaux ne sont pas pris en charge" si vous n'initialisez pas la structure dans l'ordre dans lequel ses membres ont été définis. A titre d'exemple

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. Pourquoi le CD n'est-il pas un programme ?

  2. Linux - Pourquoi utilisons-nous Su - Et pas seulement Su ?

  3. Pourquoi Nullglob n'est-il pas par défaut ?

  4. Pourquoi un long délai après la commande introuvable ?

  5. Linux - Pourquoi Setuid ne fonctionne-t-il pas ??

Pourquoi "effacer" ne pas effacer tout l'écran ?

Pourquoi `exit &` ne fonctionne pas ?

Pourquoi les fichiers .so sont-ils exécutables ?

Les threads sont-ils implémentés en tant que processus sous Linux ?

pourquoi supprimer l'historique bash n'est pas suffisant?

Pourquoi certains modèles de processeurs Intel famille 6 (Core 2, Pentium M) ne sont-ils pas pris en charge par intel_idle ?