赞
踩
原来C语言也阔以这么秀^_^~,来自于灵感的编程思想。在很多大型项目上见过类似的写法,所以今天写个Demo,记录一下,方便以后赏阅。
IDE:vscode
1、源码
- #define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))
-
- typedef enum
- {
- language_SChinese = 0,
- language_English,
- }LANGUAGE_T;
-
- typedef struct
- {
- volatile uint8_t value;
- volatile LANGUAGE_T language;
- }__attribute__((packed)) SysType_ty;
-
- SysType_ty Sys;
-
- typedef struct
- {
- uint8_t item_icon;
- uint8_t item_title;
- }MenuList;
-
- /**
- * footwear
- */
- typedef enum {
- S_badminton = 0,
- S_baseball,
- S_hockey,
- S_football,
- S_basketball,
- S_rugby,
- S_volleyball, //6
- S_tennis,
- S_table_tennis,
- S_billiards, //9
- S_ping_pong,
- S_golf,
- S_count,
- }footwearTy;
-
- typedef enum {
- t_ERROR = 0,
- t_BADMINTON,
- t_BASEBALL,
- t_HOCKEY,
- t_FOOTBALL,
- t_BASKETBALL,
- t_RUGBY,
- t_VOLLEYBALL, //6
- t_TENNIS,
- t_TABLE_TENNIS,
- t_BILLIARDS, //9
- t_PING_PONG,
- t_GOLF,
- t_count,
- }String_id;
-
-
- static MenuList const item_lists[] = {
- {S_volleyball, t_VOLLEYBALL},
- {S_rugby, t_RUGBY},
- {S_tennis, t_TENNIS},
- {S_billiards, t_BILLIARDS},
- {S_hockey, t_HOCKEY},
- };
-
- /**
- * show_footwear
- */
- uint16_t const init_footwear_index_Lists[S_count] = {
- [S_badminton ] = 0,
- [S_baseball ] = 2,
- [S_hockey ] = 7,
- [S_football ] = 0,
- [S_basketball ] = 1,
- [S_rugby ] = 3,
- [S_volleyball ] = 0,
- [S_tennis ] = 5,
- [S_table_tennis ] = 6,
- [S_billiards ] = 8,
- [S_ping_pong ] = 4,
- [S_golf ] = 9,
- };
-
- static wchar_t * const footwear_title_lists_en[t_count] = {
- [t_ERROR ] = L"error",
- [t_BADMINTON ] = L"badminton",
- [t_BASEBALL ] = L"baseball",
- [t_HOCKEY ] = L"hockey",
- [t_FOOTBALL ] = L"football",
- [t_BASKETBALL ] = L"basketball",
- [t_RUGBY ] = L"rugby",
- [t_VOLLEYBALL ] = L"volleyball",
- [t_TENNIS ] = L"tennis",
- [t_TABLE_TENNIS ] = L"table_tennis",
- [t_BILLIARDS ] = L"billiards",
- [t_PING_PONG ] = L"ping_pong",
- [t_GOLF ] = L"golf",
- };
-
- static wchar_t * const footwear_title_lists_cn[t_count] = {
- [t_ERROR ] = L"错误",
- [t_BADMINTON ] = L"羽毛球",
- [t_BASEBALL ] = L"棒球",
- [t_HOCKEY ] = L"曲棍球",
- [t_FOOTBALL ] = L"足球",
- [t_BASKETBALL ] = L"篮球",
- [t_RUGBY ] = L"橄榄球",
- [t_VOLLEYBALL ] = L"排球",
- [t_TENNIS ] = L"网球",
- [t_TABLE_TENNIS ] = L"桌球",
- [t_BILLIARDS ] = L"台球",
- [t_PING_PONG ] = L"乒乓球",
- [t_GOLF ] = L"高尔夫球",
- };
-
- static wchar_t * const * string_list = footwear_title_lists_en;
- wchar_t * string_get(String_id id)
- {
- return (wchar_t *) (string_list[id]);
- }
-
- LANGUAGE_T language_get(void)
- {
- return Sys.language;
- }
-
- void init_language(void)
- {
- Sys.language = language_English;
-
- switch (Sys.language)
- {
- case language_SChinese:
- /* code */
- string_list = footwear_title_lists_cn;
- break;
-
- case language_English:
- /* code */
- string_list = footwear_title_lists_en;
- break;
-
- default:
- Sys.language = language_English;
- init_language();
- break;
- }
-
- }
-
-
- int main()
- {
- init_language();
-
- printf("str:%s\r\n", string_get((String_id)item_lists[1].item_title));
- printf("str:%s\r\n", footwear_title_lists_cn[item_lists[1].item_title]);
-
- for (int i = 0; i < ARRAY_SIZE(item_lists); i++)
- {
- printf("i:%d, item_icon: %d, item_title: %d\r\n", i, item_lists[i].item_icon, item_lists[i].item_title);
- printf("i:%d, show_icon: %d, show_title: %s\r\n", i, init_footwear_index_Lists[item_lists[i].item_icon], string_get((String_id)item_lists[i].item_title));
- }
-
- system("pause");
- return 0;
- }

2、运行结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。