C 如何使用“定义多个类似宏”##&引用;?
我不知道是否已经有人问过同样的问题,但是我在这里用[c][macro]“#”进行高级搜索时找不到它 我想定义多个宏,如下所示:C 如何使用“定义多个类似宏”##&引用;?,c,macros,C,Macros,我不知道是否已经有人问过同样的问题,但是我在这里用[c][macro]“#”进行高级搜索时找不到它 我想定义多个宏,如下所示: #define CHANNEL_0 0 #define CHANNEL_1 1 ... #define CHANNEL_31 31 我能用这个符号简单地做吗?怎么做? 或者也许有一些方法 谢谢 我不认为“##”是最好的解决方案。为什么不直接使用enum呢?如果只需要0到31的数字,我看没有理由不使用它 enum eChannel { Channel0, /
#define CHANNEL_0 0
#define CHANNEL_1 1
...
#define CHANNEL_31 31
我能用这个符号简单地做吗?怎么做?
或者也许有一些方法
谢谢 我不认为“##”是最好的解决方案。为什么不直接使用enum呢?如果只需要0到31的数字,我看没有理由不使用它
enum eChannel {
Channel0, /* evaluates to 0 */
Channel1, /* evaluates to 1 */
...
Channel31 /* evaluates to 31 */
};
用法与#defines相同
我认为这是不可能的。不能是一个带参数的宏吗?类似于
#定义频道(x)x
。您不应该这样做。如果频道号是频道号,则只需使用int
。在C标准库中没有像INT\u FIRST 1
这样的宏是有原因的。不要过度设计事物。@H2CO3这与过度设计事物无关。它使代码更易于维护和理解。您不能只使用纯数字。根据此建议,可以使用##
枚举eChannel{Channel###0…虽然我不知道为什么使用##
会有任何帮助。@KBart我知道enum可以保存一些数字输入,但我想做的是保存频道输入。31只是一个例子,如果我有128个频道呢?嗯,我看不到任何简单的解决方案(没有一些“魔法”,这对现实生活中的项目来说永远不是一个好主意).但我也不明白,当您实际上只需要一个位数时,为什么需要这样的#定义。然而,如果您坚持这样做,一个可能的解决方案是自动生成头文件并将其包含在代码中。
if(channel == Channel1) do_smth();