zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C语言提高篇(wchar_t)字符类型

C语言字符 类型 提高
2023-09-11 14:19:59 时间

概述

        原来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、运行结果