C 要询问的预处理器语句
我写了如下内容:C 要询问的预处理器语句,c,C,我写了如下内容: #define ABC20 //#define ABC10 //#define ABC00 #ifdef ABC20 #define SYSTEMNAME "ABC2" #elif ABC10 #define SYSTEMNAME "ABC1" #elif ABC00 #define SYSTEMNAME "
#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
但输入定义的
将测试替换为结果,因此您可以得到:
#if 0
#define SYSTEMNAME "ABC2"
#elif 1
#define SYSTEMNAME "ABC1"
#elif 0
#define SYSTEMNAME "ABC0"
#else
#define SYSTEMNAME "UNKNOWN"
#endif
或者,您可以使用true
值定义on标志,使用false值定义其余标志,而无需更改测试:
#define ABC20 0
#define ABC10 1
#define ABC00 0
这基本上与前面给出的答案相同,但我试图从另一个角度来解释 指令
#elif
是#if
的“else-if”变体。此指令接受表达式并检查值是否为真(即非零)。在这种情况下,表达式中使用的任何变量都应该存在。(无可否认,C标准规定,任何未定义的符号都应被视为具有0值的符号——然而,依赖于此被认为是非常糟糕的做法。)
在本例中,您正在寻找对应于“#ifdef”的“else if”变体。全文如下:
#ifdef ABC20
#define SYSTEMNAME "ABC2"
#elif defined(ABC10)
#define SYSTEMNAME "ABC1"
...
定义的
后的括号是可选的,但当包含时,代码更容易阅读。在第一个示例中,您定义了值。。。什么都没有。。。您只创建它们的定义。
因此第一
#ifdef ABC20
工作。。。定义为ABC20
但是,当您注释掉该行并且不再定义ABC20时,您将到达
#elif
此语句不计算值是否已定义,但查看并测试定义本身。。。这是不存在的
试试这个
//#define ABC20 1
#define ABC10 1
//#define ABC00 1
你能解释得更清楚些吗?我不明白。这就像在C中说elseif()
,你需要一个条件来检查。您还可以将ABC10定义为1以使其正常工作