基于上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_CASEdefault:return "unkown error";}return NULL;
}int main()
{for (int i = 0; i < 10; i++) {printf("test result: %s\n", test_strerror(i));}return 0;
}
大家可以试着用一用 ! 希望可以帮助到各位。