C程序可以根据其值确定宏标识符/枚举名称吗?
发布时间:2020-12-16 10:14:01 所属栏目:百科 来源:网络整理
导读:假设我们将一些错误代码定义为宏 – #define ERR_SUCCESS 0#define ERR_BAD_INPUT 1 … 或者作为枚举数据类型 – enum err_t = { ERR_SUCCESS,ERR_BAD_INPUT,...}; 其中一个id由以下函数返回 – int foo(); /* if foo() returns 0,it means success,etc */ f
假设我们将一些错误代码定义为宏 –
#define ERR_SUCCESS 0 #define ERR_BAD_INPUT 1 … 或者作为枚举数据类型 – enum err_t = { ERR_SUCCESS,ERR_BAD_INPUT,...}; 其中一个id由以下函数返回 – int foo(); /* if foo() returns 0,it means success,etc */ foo()的调用者可以确定哪个标识符/名称(ERR_SUCCESS,…)链接到int返回值? 解决方法
不是直接的,正如其他人指出的那样,这些标识符在运行时不可用,但你可以使用并行的名称列表(
X Macro可以帮助):
#include <stdio.h> #define ERRS X(ERR_SUCCESS) X(ERR_BAD_INPUT) X(ERR_MORE) #define X(x) x,enum err_t {ERRS}; #undef X #define X(x) #x,static char *err_name[] = {ERRS}; #undef X static int foo(void) { /* ... */ return ERR_BAD_INPUT; } int main(void) { printf("%sn",err_name[foo()]); return 0; } 输出: ERR_BAD_INPUT (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |