mask << n
或 ~mask
。 - Lundingcc -std=c11 -pedantic-errors
会报错:error: ISO C restricts enumerator values to range of 'int' [-Wpedantic]
。 - Lundin-pedantic
时给出警告...也许你是在尝试C++编译器,或者在线编译器抑制了警告。 - M.Menum {
val1 = (int)0xFFFFFFFFu,
val2 = (int)0xFFFFFFFEu,
val3 = (int)0xFFFFFFF0
};
编辑:我刚在cygwin上安装了gcc并尝试了这个。
test-enum.c是原始版本,test-enum-int.c是具有显式转换的版本:
$ cc -std=c11 -pedantic-errors -c test-enum.c
test-enum.c:2:8: error: ISO C restricts enumerator values to range of 'int' [-Wpedantic]
val1 = 0xFFFFFFFFu,
^
test-enum.c:3:8: error: ISO C restricts enumerator values to range of 'int' [-Wpedantic]
val2 = 0xFFFFFFFEu,
^
test-enum.c:4:8: error: ISO C restricts enumerator values to range of 'int' [-Wpedantic]
val3 = 0xFFFFFFF0u
^
$ cc -std=c11 -pedantic-errors -c test-enum-int.c
(no complains)
$ cc --version
cc (GCC) 5.4.0
Copyright (C) 2015 Free Software Foundation, Inc.
之前有人说要使用ideaone.com,但他们的代码是错误的。 你必须实际使用枚举才能得到错误:
#include <stdio.h>
enum{
val1 = 0xFFFFFFFFu,
val2 = 0xFFFFFFFEu,
val3 = 0xFFFFFFF0
} abc ;
int main(void) {
abc mine = val1;
return 0;
}