Tag: enums

GCC中的枚举器属性

GCC的在线文档声称它支持枚举器属性: GCC允许在枚举器上设置属性。 然后它给出了使用这些属性的代码示例: enum E { oldval __attribute__((deprecated)), newval }; int fn (void) { return oldval; } 但是当我在我的GCC(4.8.4)上尝试它时,我收到一个错误: tc:2:15: error: expected ‘,’ or ‘}’ before ‘__attribute__’ oldval __attribute__((deprecated)), ^ 我需要在某个地方启用它们吗? 或者使用不同的GCC? 请注意,Clang也声称支持这个C扩展,但是使用Clang它可以正常工作。

具有(带符号)枚举值的按位运算

我正在使用标志的枚举器值: typedef enum { a = 0x00, b = 0x01u, // the u has no influence, as expected c = 0x02u, // the u has no influence, as expected … } enum_name; volatile unsigned char* reg = SomeAddress; *reg |= b; 根据MISRA-C:2004,不应使用带符号的类型进行按位操作。 不幸的是,我的编译器IAR使用signed int(或short或char)作为枚举的基础类型,我能找到的唯一选项与大小有关,而不是签名(“–enum-is-int”)。

转换为积分类型后C ++枚举类型的符号不正确

我的理解是根据Integral Promotion将C ++枚举转换为整数类型。 在Integral Promotion期间,我们应该首先尝试将值转换为int ,如果值不能用int表示,则应使用unsigned int : C ++ 03 conv.prom: 2)….枚举类型(7.2)的右值可以转换为以下第一种类型的右值,它可以表示枚举的所有值(即bmin到bmax范围内的值,如7.2:int,unsigned int,long或unsigned long。 但是我在VC ++ 2010中的测试显示出相反的结果: enum {A1=60, A2=61,A3=63,A4=64,A5=66,A6=0xffffFFF1}; const bool b1 = A6 < A1; //result b1=true; A6是0xffffFFF1 ,应该是无符号值(十进制4294967281)。 并且,由于此值不能由int表示,因此应将其转换为unsigned int 。 但很明显,当用于比较时, A6被转换为-15。 为什么会这样?

结构中的枚举; 新手在交流

我想知道在struct中使用enum的语法( 在C ) 我已经看过各种例子,其中使用struct + union / enum组合来创建复杂类型,例如: struct MyStruct{ enum{ TYPE_1, TYPE_2, TYPE_3, } type; union{ int value_1; int value_2; int value_3; } value; }; // … struct MyStruct test_struct; 无论如何,从这个例子中,我如何根据enum字段存储/测试当前的“类型”? 如果我有一个指向test_struct的指针,这似乎不起作用; 踢回未知成员错误: struct MyStruct *test_pointer = &test_struct; test_pointer->value = test_pointer->VALUE_1; 我只是好奇,我需要将enum值作为全局值来访问吗? test_pointer->value = VALUE_1; 任何澄清将不胜感激。

请求从’KanjiCard *’转换为非标量类型’KanjiCard’(自定义枚举)

好吧,我已经尝试过使用Google-sensei并在这个网站上搜索一下,虽然我发现了很多关于这个错误的post,但我还没有发现任何有关枚举的post。 此外,我所看到的所有人都有人试图将一种类型分配给另一种类型,不恰当地使用“新”等等。据我所知,在这种情况下情况并非如此。 正如标题中所述,在尝试编译我正在使用g ++编写的程序时,我收到了conversion from ‘KanjiCard*’ to non-scalar type ‘KanjiCard’ requested的错误conversion from ‘KanjiCard*’ to non-scalar type ‘KanjiCard’ requested 。 我有一个名为KanjiCard的类,它具有这个公开定义的枚举: enum KanjiCardType { KANJI_CARD = 1, KEYWORD_CARD = 2 }; 该类的构造函数定义如下: KanjiCard(char *cardText, int cardTextLength, int cardWidth, int cardHeight, int cardX, int cardY, KanjiCardType cardType, SDL_Color textColor); (我使用的是char *而不是std :: string,因为它更容易使用我正在使用的库。) 我打电话给它创建这样的新卡(这是错误出现的地方): KanjiCard currentCard = […]

使用#define重新定义枚举枚举器

我在C头文件中发现了一些我无法弄清楚是什么的东西。 例如,在文件bits/socket.h有一个枚举类型enum __socket_type ,但是在每个枚举器之后都有一个定义宏的定义宏。 例: enum __socket_type { SOCK_STREAM = 1, #define SOCK_STREAM SOCK_STREAM … }; 我一直无法知道这是为了什么。 请赐教。 我甚至不知道如何形成正确的问题来查询谷歌或这个网站搜索框。

如何将一个枚举值转换/分配给另一个枚举

我在2个不同的模块中有2个枚举,它们具有完全相同的值集。 我怎么能把一个扔到另一个? typedef EnumA{ a_dog = 0, a_cat = 1 } EnumA; typedef EnumB{ b_dog = 0, b_cat = 1 } EnumB; EnumA a = a_dog; EnumB b; b = a; 这样的赋值会产生一个警告:枚举类型与另一种类型混合我可以通过类型转换来避免switch-case,比如说 b = (int)a; 要么 b = (EnumB)a;

clang enum溢出

使用-Wall -pedantic #include #include int main(void) { enum x { a, max = INT_MAX, out_1 }; enum y { b, out_2 = INT_MAX + 1 }; printf(“%d %d\n”, out_1, out_2); return 0; } 铿锵回归 demo.c:9:3: warning: overflow in enumeration value out_1 ^ 正如您所看到的,编译器没有警告out_2溢出,他的值在编译时是未知的?

结构中的枚举 – C与C ++

我正在尝试在结构中使用枚举,这可以编译并与gcc 。 但是使用g++编译时相同的代码会引发错误。 #include #include 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); } 用gcc获得的输出: $ gcc foo.c $ ./a.out mode=0 用g++获得的输出: $ g++ foo.c foo.c: In function […]

Typedef和enum具有相同的名称?

在FreeImagePlus库中,在FreeImage.h ,有一个有趣的#define似乎创建了一个typedef和一个具有相同名称的enum : #define FI_ENUM(x) typedef int x; enum x 这由预处理器扩展为代码,如: typedef int FREE_IMAGE_FILTER; enum FREE_IMAGE_FILTER { FILTER_BOX = 0, FILTER_BICUBIC = 1, […] 这是做什么的? 拥有一个typedef和一个同名的enum是否合法? 并不是一个与int兼容的enum ? 为什么FreeImage会这样做?