Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使用“定义多个类似宏”##&引用;?_C_Macros - Fatal编程技术网

C 如何使用“定义多个类似宏”##&引用;?

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, /

我不知道是否已经有人问过同样的问题,但是我在这里用[c][macro]“#”进行高级搜索时找不到它

我想定义多个宏,如下所示:

#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();