Pourquoi sont désignés initialiseurs de la mise en œuvre de g++
Est-il une raison particulière pourquoi soutien pour les initialiseurs pas été ajouté à g++? C'est la raison que C99 normes est arrivé en retard et g++ a été développé plus tôt et plus tard les gens ne se soucient pas de ce problème, ou s'il existe quelque difficulté inhérente à la mise en œuvre désigné initialiseurs dans la grammaire du C++?
Linux est écrit en C et pas du C++. g++ est le frontend pour le C++, l'utilisation de gcc pour la C.
Singh: à l'Aide de C++ dans le noyau Linux est une très, très mauvaise idée. Linux est dépourvu de toute l'infrastructure nécessaire à C++ fonctionne correctement. Linus Torvalds a expliqué plusieurs fois dans le détail: kerneltrap.org/node/2067
Compiler C fichiers avec un C de la compilation et fichiers C++ avec un compilateur C++. Désigné initialiseurs fonctionnent parfaitement bien en C, mais ils ne sont pas valide en C++.
Je veux savoir la raison pourquoi ne sont-ils pas pris en charge par le C++
Pourquoi ne pas vous venez de compiler le C parties du noyau avec le compilateur C, C++ pièces avec
Singh: à l'Aide de C++ dans le noyau Linux est une très, très mauvaise idée. Linux est dépourvu de toute l'infrastructure nécessaire à C++ fonctionne correctement. Linus Torvalds a expliqué plusieurs fois dans le détail: kerneltrap.org/node/2067
Compiler C fichiers avec un C de la compilation et fichiers C++ avec un compilateur C++. Désigné initialiseurs fonctionnent parfaitement bien en C, mais ils ne sont pas valide en C++.
Je veux savoir la raison pourquoi ne sont-ils pas pris en charge par le C++
Pourquoi ne pas vous venez de compiler le C parties du noyau avec le compilateur C, C++ pièces avec
g++
, puis les lier ensemble le résultat?OriginalL'auteur Bharat | 2011-02-04
Vous devez vous connecter pour publier un commentaire.
Comme je l'ai mentionné dans un commentaire, G++ ne prend pas en charge standard C99 désigné initialisers, mais il prend en charge l'extension GNU pour C90 qui permet désignée initialisers. Si cela ne fonctionne pas:
Mais ce n':
Cela semble être une mauvaise interaction de la coordination entre le C et le C++ comités de normalisation (il n'est pas particulièrement bonne raison pourquoi C++ ne prend pas en charge le C99 syntaxe, ils n'ont tout simplement pas considéré) et GCC politique (C++ ne devrait pas en charge C99 syntaxe juste parce que c'est en C99, mais elle doit prendre en charge GNU extension de la syntaxe qui permet d'obtenir exactement la même chose parce que c'est une extension GNU qui peut être appliqué à l'une ou l'autre langue).
Eh bien, la réponse a été donnée en 2012.
Yep, désolé, qui a été conçu comme une note aux lecteurs plutôt qu'une correction en soi.
OriginalL'auteur Tom
J'ai rencontré ce même problème aujourd'hui. g++ avec -std=c++11 et c++14 prend en charge désigné initialiseurs, mais vous pouvez toujours obtenir une erreur de compilation ".cxx:78:9: désolé, pas implémentée: non-trivial désigné initialiseurs pas pris en charge" si vous n'avez pas initialiser la structure dans l'ordre dans lequel ses membres ont été définis. Comme un exemple
Maintenant corrigé.
OriginalL'auteur Anirban Mandal
C++ ne prend pas en charge cette. Il ne sera même pas dans le C++0x normes, il semble: http://groups.google.com/group/comp.std.c++/browse_thread/thread/8b7331b0879045ad?pli=1
Aussi, pourquoi êtes-vous en train d'essayer de compiler le noyau Linux avec G++?
Attendez jusqu'à Linus en entend parler.
OriginalL'auteur Maister
À tout le moins au g++-4.8 c'est maintenant pris en charge par défaut.
OriginalL'auteur Catskul
Qu'en anonyme syndicats?
En C, je peux avoir ceci:
Et initialisé comme ceci:
Cependant, en vertu de g++, même avec le c++14 cela donne le même "désolé, lettre morte" une erreur. Nous devons être en mesure de définir les variables C en C++ lorsque nous avons au moins l'envie de l'unité de test de code en C avec C++ framework de test. Le fait qu'une telle caractéristique de valeur de C n'est pas pris en charge est assez dommage.
OriginalL'auteur Martin
Accoding à
http://gcc.gnu.org/c99status.html
désigné initialiseurs ont déjà été mis en œuvre.
Quelle version de g++ utilisez-vous? (Essayez de g++ -- version)
Peut-être que vous n'utilisez pas de "C"mode
g++ prend en charge C. Essayez de g++ -X c
L'affiche veut C99 constructions en C++, ce qui est complètement faux.
je ne veux pas C99 constructions, je veux savoir la raison pour laquelle ils ne sont pas pris en charge en C++, si il y a une raison valable pourquoi ils ne sont pas pris en charge, il me ferait aucun point pour moi de passer du temps dans la modification de la gcc.
OriginalL'auteur Alexandr Priymak