提问人:Classy Fied 提问时间:8/30/2023 最后编辑:Vlad from MoscowClassy Fied 更新时间:8/30/2023 访问量:64
初始化枚举变量的警告:类型在“etatCourant”的声明中默认为“int” [-Wimplicit-int]
warning for initialized enum variable : type defaults to 'int' in declaration of 'etatCourant' [-Wimplicit-int]
问:
当我尝试初始化我的枚举变量时,我收到警告。代码如下:
enum etatCourant {REPOS, MARCHE_AV, MARCHE_AR, ERREUR};
etatCourant = REPOS;
这是警告:type 在“etatCourant”的声明中默认为“int” [-Wimplicit-int]
我错过了什么吗?
代码按预期工作,但我只是不喜欢警告。我尽量避免它们
答:
1赞
Vlad from Moscow
8/30/2023
#1
您正在尝试声明一个变量,其名称与枚举标记名称一致,而未在变量的声明中指定类型说明符
enum etatCourant {REPOS, MARCHE_AV, MARCHE_AR, ERREUR};
etatCourant = REPOS;
^^^^^^^^^^^
因此,根据编译器消息,它假定默认情况下它将具有类型。int
如果要声明枚举类型的变量,则需要编写例如
enum etatCourant {REPOS, MARCHE_AV, MARCHE_AR, ERREUR};
enum etatCourant courant = REPOS;
在这种情况下,变量将具有枚举类型。courant
enum etatCourant
或者声明也可以重写,就像
enum etatCourant etatCourant = REPOS;
尽管这样的声明可能会使代码的读者感到困惑。
代码按预期工作,但我只是不喜欢警告。我试着 尽可能避免它们
该代码按预期工作,因为在 C 中枚举属于整数类型,而枚举器具有 .int
评论
0赞
Jabberwocky
8/30/2023
这不应该编译:godbolt.org/z/EMzjGrnE7
0赞
Classy Fied
8/30/2023
@VladfromMoscow 哦,好的,非常感谢。我忘记了它像结构一样工作
0赞
Vlad from Moscow
8/30/2023
@ClassyFied完全没有。在 C 中,与 C++ 结构相反,联合和枚举标记名称与普通标识符位于不同的命名空间中。
0赞
fukanchik
8/30/2023
#2
在旧式函数声明中,可以跳过参数类型。编译器会将其视为 int:
enum etatCourant {REPOS, MARCHE_AV, MARCHE_AR, ERREUR};
void foo(etatCourant)
{
etatCourant = REPOS;
}
int main()
{
int a=0;
foo(a);
return a;
}
编译器在这里看到好像它声明了foo
void foo(int etatCourant);
因此,您会收到警告:
x.c:3:6: warning: type of ‘etatCourant’ defaults to ‘int’ [-Wimplicit-int]
3 | void foo(etatCourant)
| ^~~
只需将类型添加到函数声明中即可:
void foo(enum etatCourant etatCourant);
警告就会消失。
评论