C语言中比较优雅的错误定义

废话不多说,直接上代码

c 复制代码
#include <stdio.h>
#include <stdlib.h>

#define foreach_http_error				\
  _ (401, "401 error")					\
  _ (501, "501 error")

typedef enum
{
#define _(sym,string) HTTP_ERROR_##sym,
	foreach_http_error
#undef _
	HTTP_N_ERROR,
} http_reply_error_t;

static char *http_error_strings[] = {
#define _(sym,string) string,
	foreach_http_error
#undef _
};

const char *get_error(const int code) {
	return http_error_strings[code];
}

int main() {
	const char *err = get_error(HTTP_ERROR_401);
	printf("err string: %s\n", err);
	getchar();
	return 0;
}
相关推荐
悟能不能悟7 分钟前
java HttpServletRequest 设置header
java·开发语言
云栖梦泽12 分钟前
易语言运维自动化:中小微企业的「数字化运维瑞士军刀」
开发语言
刘975315 分钟前
【第23天】23c#今日小结
开发语言·c#
郝学胜-神的一滴25 分钟前
线程同步:并行世界的秩序守护者
java·linux·开发语言·c++·程序人生
superman超哥26 分钟前
Rust 移动语义(Move Semantics)的工作原理:零成本所有权转移的深度解析
开发语言·后端·rust·工作原理·深度解析·rust移动语义·move semantics
青茶36027 分钟前
【js教程】如何用jq的js方法获取url链接上的参数值?
开发语言·前端·javascript
Batac_蝠猫29 分钟前
C - 内存缓存池2
c语言
superman超哥37 分钟前
Rust 所有权转移在函数调用中的表现:编译期保证的零成本抽象
开发语言·后端·rust·函数调用·零成本抽象·rust所有权转移
xiaowu08037 分钟前
C# 把dll分别放在指定的文件夹的方法
开发语言·c#
cchjyq44 分钟前
嵌入式按键调参:简洁接口轻松调参(ADC FLASH 按键 屏幕参数显示)
c语言·c++·单片机·mcu·开源·开源软件