当前位置: 首页 > article >正文

【C/C++】推荐一个性能优良的错误码打印机制,已实测!

基于上1篇 switch与for的性能比较文章,若我们在开发一个较大型的系统架构,则错误码机制是必不可少的。
但是,基于灵活可扩展思想,我们的错误码是与日俱增的,所以,如何能不写很多switch-case语句,是我们的一个思考点。

下面是在下拙见,抛砖引玉,希望可以给大家一些帮助。

#include <stdio.h>
#include <stdlib.h>

#define	TEST_ERRNO_MAP(E)\
	E(-1, UNKNOW, "unknown error")\
	E(0, SUCCESS, "success")\
	E(1, XXX, "XXX")\
	// TODO可一直连续扩展

// 随着错误码数量的增多,编译器会将switch-case的查找基于跳转表进行组织,查找效率为O(1); 若数量较少,编译器则基于二分查找树进行组织,查找效率为O(logn)。 若为for循环遍历,则平均是O(n)。
const char *test_strerror(int test_err)
{
	switch (test_err) {
		#define TEST_ERR_CASE(n, e, s) case n : return s;
			TEST_ERR_MAP(TEST_ERR_CASE)
		#undef TEST_ERR_CASE
		default:
			return "unkown error";
	}
	return NULL;
}

int main()
{
	for (int i = 0; i < 10; i++) {
		printf("test result: %s\n", test_strerror(i));
	}
	return 0;
}

大家可以试着用一用 ! 希望可以帮助到各位。


http://www.kler.cn/a/449924.html

相关文章:

  • #渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍10基于文件操作的SQL注入(File-Based SQL Injection)
  • 【示例】Vue AntV G6 base64自定义img 动画效果,自适应宽高屏
  • nvm下载管理node版本
  • 在 Ubuntu 上安装 MySQL 的详细指南
  • 今日总结 2024-12-23
  • 利用 Jsoup 进行高效 Web 抓取与 HTML 处理
  • JSON 中的 $ref 问题及 DisableCircularReferenceDetect 解析
  • 突破续航瓶颈:数字样机技术引领新能源汽车复合制动新方向
  • SQL server学习09-数据库编程(上)
  • Java与容器化:如何使用Docker和Kubernetes优化Java应用的部署
  • SpringBoot中使用AOP切面编程实现登录拦截
  • 全面解析 Kubernetes 流量负载均衡:iptables 与 IPVS 模式
  • pyQt5实现目标检测可视化001
  • 基于Spring Boot的旅游推荐系统
  • Linux下mysql 8.0安装教程
  • [LeetCode-Python版] 定长滑动窗口8——2461. 长度为 K 子数组中的最大和
  • Windows和Linux安全配置和加固
  • [Effective C++]条款38-39 复合和private继承
  • IT运维的365天--021 服务器上的dns设置后不起作用
  • aws(学习笔记第十九课) 使用ECS和Fargate进行容器开发