编译器#警告: print enum value

标签 c enums constants compiler-warnings

我想将枚举值打印为#warning#pragma message。我使用 typedef enum 而不是 #define'ing 值,因为它使编辑更容易,并允许输入函数参数和返回值。

打印原因:enum的常量最大值不得超过某个值,但是我无法直接在代码中检查该值,因为它的值是自动递增的:typedef enum {a, b, ... az } mytype_t;。在此示例中,az 必须小于 [any u_int]。

我尝试根据 this post 对值进行字符串化,但是它仅适用于 #define 的值。我尝试了 enum 值的变体,但无法获取要打印的实际值,只能获取其名称。

有没有办法在编译时打印枚举值(或 const 变量)?谢谢。

编辑: 我使用 Microchips XC8 编译器(8 位)和 C99。

最佳答案

C 标准没有提供在预处理器宏或其他编译时方法中报告枚举常量值的方法。但是,可以测试该值是否在所需范围内。

从 C 2011 开始,您可以使用 _Static_assert 来测试枚举常量:

enum { a, b, c, d, e };

_Static_assert(e <= 3, "Enumeration constant exceeds 3.");

在 C 2011 之前,您可以通过多种方式组合测试,例如:

enum { a, b, c, d, e };

int FailIfSizeMismatches[1];      // Define array with good size.
int FailIfSizeMismatches[e <= 3]; // Define with conflicting size if test fails.

(在 C++ 中,将 _Static_assert 替换为 static_assert。)

关于编译器#警告: print enum value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60167467/

相关文章:

c - 如何将输出音频传输到 gstreamer 脚本?

c - 将字符串分配给字符数组

ios - 如何在 Swift 中简化几乎相等的枚举扩展

delphi - 如何声明 Int64 常量?

c++ - 在 C++ 的头文件中使用常量并在程序中询问它们的地址的任何潜在危险

c - 在文件上使用 mmap

android - 是否可以使用 C Hook android gsm 调制解调器

swift - 案例成员值如何存储?

java - 关于 Java 的方法论和正确实践

java - GWT/GXT 国际化问题