Les énumérations au sein d'une structure (struct) - C vs C++
Je suis en train d'utiliser les Énumérations dans un struct, cette compile et fonctionne très bien avec gcc
.
Mais le même code lors de la compilation avec g++
renvoie une erreur.
#include<stdio.h>
#include<stdlib.h>
struct foo
{
enum {MODE1, MODE2, MODE3} mode;
enum {TYPE1, TYPE2} type;
};
void bar(struct foo* bar)
{
bar->mode = MODE1;
}
int main()
{
struct foo* foo = (struct foo*) malloc(sizeof(struct foo));
bar(foo);
printf("mode=%d\n",foo->mode);
}
De sortie obtenue avec gcc
:
$ gcc foo.c
$ ./a.out
mode=0
De sortie obtenue avec g++
:
$ g++ foo.c
foo.c: In function ‘void bar(foo*)’:
foo.c:11: error: ‘MODE1’ was not declared in this scope
Hourra! Quelqu'un qui comprend que le C et le C++ sont (très) différentes langues! (Bien sûr je parle du compilateur :P)
assurez-vous qu'ils sont différents, il existe de nombreuses différences.
Seriez-vous heureux si j'ai modifié le titre de
Votre titre est très bien. Ce qui se passe, c'est que souvent les gens pensent qu'il existe une langue appelée C/C++, avec une série de règles 🙂
assurez-vous qu'ils sont différents, il existe de nombreuses différences.
Seriez-vous heureux si j'ai modifié le titre de
gcc vs g++
au lieu de c vs c++
🙂Votre titre est très bien. Ce qui se passe, c'est que souvent les gens pensent qu'il existe une langue appelée C/C++, avec une série de règles 🙂
OriginalL'auteur arunmoezhi | 2014-05-04
Vous devez vous connecter pour publier un commentaire.
MODE1
est dans le champ d'application defoo
, si vous avez besoinNotez que si vous voulez accéder aux types d'énumérations sans portée, vous auriez besoin de les déclarer. Par exemple:
MODE1
appartient àfoo
. Je ne peux pas faire un#define MODE1 foo::MODE1
. Qui contreviendrait à la foo définition. Fondamentalement, je veux minimiserC++
style de codage dans monC
code 🙂Pour le C/C++ de compatibilité, vous devrez déplacer les énumérations à l'extérieur de la structure.
Je ne suis pas sûr de suivre. Vous ne voulez pas de code C++, mais vous voulez compiler du C++? Qui va être très douloureux.
Je ne comprends pas. J'ai besoin de la énumérations de faire partie de cette structure.
Comme je l'ai dit, j'ai voulu minimiser
C++
. Le seul autre endroit dans mon code où je l'utiliserC++
est quand j'ai atomique variables qui utilisent Intel TBB qui ne prend pas en charge C. bien sûr, je suis complètement ok avec l'aide defoo:MODE1
. Mais j'espérais qu'il pourrait être une façon d'éviter lafoo::
OriginalL'auteur juanchopanza