前言:
此刻各位老铁们对“n阶乘c语言”都比较注重,我们都想要学习一些“n阶乘c语言”的相关知识。那么小编同时在网摘上搜集了一些对于“n阶乘c语言””的相关知识,希望你们能喜欢,朋友们快快来了解一下吧!大家都知道,枚举类型是一组整型类型的数据,我们为了程序容易阅读而设计枚举类型,比如定义颜色:
enum Color { RED,GREEN,BLUE };
我们可以在程序直接使用RED来代表红色。那么,有一个问题,我们在调试的时候想打印“RED”怎么办呢?
使用X-Macros技术可以解决上述问题。代码如下:
// 定义X-Macros,其中X为COLOR
#define COLOR_LIST \
COLOR(RED) \
COLOR(GREEN) \
COLOR(BLUE)
#define COLOR(name) name,
enum Color {
COLOR_LIST
};
#undef COLOR
#define COLOR(name) #name,
const char* ColorNames[] = {
COLOR_LIST
};
#undef COLOR
void test( void )
{
for (int i = 0; i < sizeof(ColorNames) / sizeof(const char*); ++i) {
rt_debug("Color: %s, Value: %d\n", ColorNames[i], i);
}
rt_debug("RED Color: %s=%d\n", ColorNames[RED], RED);
}
上述例子中,先定义COLOR_LIST,一组颜色的宏定义。然后定义enum Color颜色枚举。再定义const char* ColorNames[]颜色字符串数组;其中有一个小知识点,这里讲一下,#undef COLOR是取消宏定义的意思。这个可以控制宏定义的作用域。还有一个小知识点,#name,代表name代替的字符串,比如“RED”;
在test中,可以直接用ColorNames[RED]来打印RED字符串了。
最后,我有一个疑问,请大家思考,ColorNames[RED]中RED的值为0,所有ColorNames[RED]等价于ColorNames[0],那么如果颜色的宏定义不是从0开始,或者随机的数,怎么办呢?
enum Color {
RED = 99,
GREEN = 9,
BLUE = 0,
};
下期给出答案。