C程序可以根据其值确定宏标识符枚举名称吗?

C程序可以根据其值确定宏标识符枚举名称吗?,第1张

概述假设我们将一些错误代码定义为宏 – #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 假设我们将一些错误代码定义为宏 –

#@R_403_5552@ ERR_SUCCESS 0#@R_403_5552@ 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>#@R_403_5552@ ERRS \    X(ERR_SUCCESS) \    X(ERR_BAD_input) \    X(ERR_MORE)#@R_403_5552@ X(x) x,enum err_t {ERRS};#undef X#@R_403_5552@ X(x) #x,static char *err_name[] = {ERRS};#undef Xstatic int foo(voID){    /* ... */    return ERR_BAD_input;}int main(voID){    printf("%s\n",err_name[foo()]);    return 0;}

输出:

ERR_BAD_input
总结

以上是内存溢出为你收集整理的C程序可以根据其值确定宏标识符/枚举名称吗?全部内容,希望文章能够帮你解决C程序可以根据其值确定宏标识符/枚举名称吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1218575.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存