编译器警告:打印枚举值

问题描述 投票:0回答:3

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

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

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

编译时是否有一种打印枚举值(或const变量)的方法?谢谢。

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

c enums const compiler-warnings
3个回答
1
投票

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。]


0
投票

#warning#pragma#define等在之前进行处理。您需要改为printf您的变量


0
投票

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


-1
投票

编译时是否有一种打印枚举值(或常量变量)的方法?

您可以用printf()打印它们:

#include <stdio.h>

enum day{ Monday,Tuesday,Wednesday };

const int a = 25;

int main()
{
    enum day days;

    days = Tuesday;

    printf("enum constant is %d\n",days);
    printf("constant variable is %d",a);
}

输出:

enum constant is 1                                                                                                                                                                          
constant variable is 25 
© www.soinside.com 2019 - 2024. All rights reserved.