繁体   English   中英

编译器#warning:打印枚举值

[英]Compiler #warning: print enum value

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

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

我试图根据这篇文章对值进行字符串化,但它仅适用于#define 'd 值。 我尝试了enum值的变体,但无法打印实际值,只能打印其名称。

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

编辑:我使用 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 。)

正如Frankie_C 写的评论,你必须对预处理和处理进行分类。 枚举在预处理后评估,而#define、#pragma、#warning 在预处理后评估

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM