【发布时间】:2020-05-26 18:41:30
【问题描述】:
我想将枚举的值打印为#warning 或#pragma message。我使用 typedef enum 而不是 #define'ing 值,因为它使编辑更容易,并允许键入函数参数和返回值。
打印原因:enum 的常量最大值不得超过某个值,但是我无法直接在代码中检查该值,因为它的值是自动递增的:typedef enum {a, b, ... az } mytype_t;。在本例中,az 必须小于 [any u_int]。
我尝试根据this post 对值进行字符串化,但它仅适用于#define'd 值。我尝试了 enum 值的变体,但无法打印出实际值,只能打印其名称。
有没有办法在编译时打印一个枚举值(或者也是一个 const 变量)?谢谢。
编辑: 我使用 Microchips XC8 编译器(8 位)和 C99。
【问题讨论】:
-
您无法打印
enum值,因为它是在预处理后进行评估的。该值在#warning和#pragma message时间根本不可用。 -
使用
_Static_assert。它不会打印值,但会提供您想要的测试。 -
什么编译器?
#warning不是标准 C,#pragma X是特定于编译器的。 -
还有“枚举值不能超过某个值”是什么意思,是枚举变量的运行时值还是枚举常量的值?
-
@Frankie_C:现在说得通了! @EricPostpischil:谢谢!我发现了一些对我有用的东西。不是那么漂亮,但可以完成工作。 @Lundin:我忘了说明。我将 Microchips XC8(8 位编译器)与 C99 一起使用,我将编辑我的帖子并添加此信息;我的意思是
enum的常量值。它是 eeprom 的地址列表,大小为 256 字节。
标签: c enums constants compiler-warnings