gpt4 book ai didi

c - 预处理器语句询问

转载 作者:太空狗 更新时间:2023-10-29 15:33:14 26 4
gpt4 key购买 nike

我写了如下内容:

#define ABC20
//#define ABC10
//#define ABC00

#ifdef ABC20
#define SYSTEMNAME "ABC2"
#elif ABC10
#define SYSTEMNAME "ABC1"
#elif ABC00
#define SYSTEMNAME "ABC0"
#else
#define SYSTEMNAME "UNKNOWN"
#endif

而且它可以工作。

但是如果我改成下面的样子:

//#define ABC20
#define ABC10
//#define ABC00

#ifdef ABC20
#define SYSTEMNAME "ABC2"
#elif ABC10
#define SYSTEMNAME "ABC1"
#elif ABC00
#define SYSTEMNAME "ABC0"
#else
#define SYSTEMNAME "UNKNOWN"
#endif

当我编译时,出现错误提示 ABC10 未声明。你们知道为什么吗?

最佳答案

使用定义的测试:

#ifdef ABC20
#define SYSTEMNAME "ABC2"
#elif defined ABC10
#define SYSTEMNAME "ABC1"
#elif defined ABC00
#define SYSTEMNAME "ABC0"
#else
#define SYSTEMNAME "UNKNOWN"
#endif

否则 elif 没有条件检查,因为在预处理之后您剩下:

#ifdef 
  #define  SYSTEMNAME                       "ABC2"
#elif
  #define  SYSTEMNAME                       "ABC1"
#elif
  #define  SYSTEMNAME                       "ABC0"
#else
  #define  SYSTEMNAME                       "UNKNOWN"
#endif

但是放入 defined 会用结果替换测试,这样你会得到:

#if   0
#define SYSTEMNAME "ABC2"
#elif 1
#define SYSTEMNAME "ABC1"
#elif 0
#define SYSTEMNAME "ABC0"
#else
#define SYSTEMNAME "UNKNOWN"
#endif

或者,您可以在不更改测试的情况下定义具有 true 值的标志,以及具有 false 值的其余标志:

#define ABC20 0
#define ABC10 1
#define ABC00 0

关于c - 预处理器语句询问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13560999/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com