Tag: enums

如何在GCC中指定枚举大小?

我想为枚举指定64位的枚举大小。 这怎么可能通过海湾合作委员会? 代码不需要是“可移植的”,因为我只对将代码用于x86-32和x86-64 Linux的GCC编译感兴趣。 这意味着任何可以提供我想要的function的黑客都可以,只要它适用于那些目标。 鉴于此代码: #include #include enum some_enum { garbage1, garbage2 }; int main(void) { enum some_enum some_val; printf(“size: %lu\n”, sizeof(some_val)); return EXIT_SUCCESS; } 这当前打印出4,而我希望能够强制大小为8.尝试在枚举赋值中指定大于4个字节的值会导致警告。 例如, enum some_enum { garbage1 = ‘12345’, garbage2 }; 会产生: warning: character constant too long for its type [enabled by default] 这里对类似问题的回答似乎没有产生任何好结果。 也就是说,由于以下原因产生了相同的警告: enum some_enum { garbage1 = […]

枚举中的价值是多少?

如下面的代码所示,cvmx_fau_reg_64_t中0和CVMX_FAU_REG_64_ADDR(0)之间的区别是什么? #define CVMX_FAU_REG_64_ADDR(x) ((x <<3) + CVMX_FAU_REG_64_START) typedef enum { CVMX_FAU_REG_64_START = 0, CVMX_FAU_REG_64_END = CVMX_FAU_REG_64_ADDR(0), } cvmx_fau_reg_64_t;

MISRA违规规则10.1和枚举

首先,这类似于: 如何隐式转换整数类型? 但是有一个不同的MISRA警告。 编译器不会生成MISRA错误,但静态分析工具会生成错误。 我正在与正在进行的工具制造商订票。 鉴于: #include enum Color {RED, VIOLET, BLUE, GREEN, YELLOW, ORANGE}; int main(void) { enum Color my_color; my_color = BLUE; if (my_color == YELLOW) // Generates MISRA violation, see below. { printf(“Color is yellow.\n”); } else { printf(“Color is not yellow.\n”); } return 0; } 静态分析工具正在为if语句生成MISRA违规: MISRA-2004 Rule 10.1 violation: implicitly […]

enum bool的冲突类型?

我有一个程序,它给出[Error] conflicting types for ‘full’ [Error] conflicting types for ’empty’和[Error] conflicting types for ‘full’ 。 我有一种预感,它与enum bool使用有关(这是我第一次尝试使用它)。 我看过其他类似的问题,这对我没有帮助,问题是忘记在程序中声明原型。 我确保在main之前编写我的函数。 这是我的代码: #include #include #include typedef struct{ char** data; // array of strings represnting the stack int top; // -1 if empty int size; }Stack; typedef enum { FALSE, TRUE } bool; Stack* create(){ Stack *s; s […]

强制结构中枚举字段的大小

[注意:这与指定C中枚举类型 的大小和C中枚举的大小有关? ,但在这些问题中,问题是如何最小化封闭结构的大小。 在这里,我们要指定结构的各个成员的大小,但仍然获得typedef’d enums的文档优势] 我正在实现串行通信协议的客户端。 我想使用C结构来捕获串行数据包的格式,我想使用C枚举来定义数据包中各种插槽的合法值。 我没有办法做到这两点,但由于我使用GCC,它可能是可能的。 作为问题的假设示例,假设我收到的数据包如下所示: typedef struct { uint16_t appliance_type; uint8_t voltage; uint16_t crc; } __attribute__((__packed__)) appliance_t; 这很清楚,我很确定我会得到一个长度为五个字节的结构。 但它没有捕获appliance_type和voltage只能采用某些值的事实。 我更喜欢这样的东西…… typedef enum { kRefrigerator = 600, kToaster = 700, kBlender = 800 } appliance_type_t; typedef enum { k120vac = 0, k240vac = 1, k12vdc = 2 } voltage_t; typedef struct { […]

未申报的枚举?

在编译此代码时: #include enum Boolean { TRUE, FALSE }; int main(int argc, char **argv) { printf(“%d”, Boolean.TRUE); return 0; } 我越来越: 错误:’布尔’未声明(首次在此函数中使用) 我做错了什么?

如果将第一个元素定义为1,那么枚举元素的值是多少?

我有以下代码: enum e { X=1, Y, Z } 如果将第一个元素定义为1,那么枚举元素的值是多少? 其他元素每个会增加1吗?

在C / C ++中使用枚举

我正在努力调整此处显示的代码,但是,我想创建一个可能值的枚举,而不是使用单个值。 如果可能的话,我想将其保留在头文件中,我希望它包含类似于……的值。 enum Notes{ NOTE_B0 = 31, NOTE_C1 = 33, NOTE_CS1 = 35 }; 现在我想要遍历枚举值,我该怎么做? 我还可以存储超过255的值吗?

如何使用C#等C ++枚举类型?

如何使用C#等C ++枚举类型? 考虑c ++中的以下定义: enum myEnum { A, B, C}; myEnum en = A; 现在我希望将第2行写成如下行,如C#: myEnum en = myEnum.A; ??

在C89中使用可变参数函数而不传递参数或最终参数?

假设我有一个可变函数foo(int tmp, …) ,当调用foo函数时我需要知道有多少个参数。 我知道有两种方法可以找出有多少参数: 在调用foo时使用最后一个参数,比如-1,所以你的函数调用将是这样的: foo(tmp, 1, 2, 9, -1) ,当你在foo内部并且va_arg调用返回-1时你知道你已阅读所有函数参数 在foo中再添加一个参数,程序员将拥有参数总数,因此你可以像这样调用foo: foo(tmp, 5, 1, 2, 3, 4, 5) foo(tmp, 2, 7, 8) foo(tmp, 5, 1, 2, 3, 4, 5)或foo(tmp, 2, 7, 8) 我曾经遵循第一种方式,曾经有过以下错误。 随着代码: expr_of_type(expr, boolexpr_e, newtable_e, nil_e, -1) 其中expr_of_type是一个可变参数函数,并检查expr(第一个参数)是否是以下类型之一(boolexpr_e或new_table_e或nil_e具有所有类型的枚举类型)。 我一个人意外地写道: expr_of_type(expr, boolexpr_e, newtable_e, nil_e -1) 我忘记了nil_e和-1之间的逗号,因为nil_e有一个枚举类型,nil_e – 1是一个有效的表达式,因为nil_e不是0,当尝试获取expr_of_type参数时,给定的可变参数函数没有找到-1作为最后一个参数继续搜索创建一个花了我一些时间才发现的bug。 我也没有找到第二种方式,因为当从可变参数函数中添加或删除一个参数时,您需要更改包含总参数数量的参数。 在寻找更好的使用/创建可变参数函数的方法时,我发现了可变元宏 ,它可以解决我在使用第一种方式时遇到的错误。 但是可变参数宏可用于C99标准。 […]