"if define A" 与 "if defined A" 的区别,该怎么解决

"#if define A" 与 "#if defined A" 的区别
不知发这个帖子过时不??
看似简单的预处理,却把我搞得晕头转向,上网查找资料
当经过多次实践后,终于发现了其中蕴藏的秘密,分享给大家,有不对之处,请大家多多指教!


1/" #if define ABC " 这是一种错误的写法
2/" #elif define ABC " 这是一种错误的写法
这两种写法可能 能通过编译器,但执行的结果却是错误的!!! 既然是错误的怎样改正呢?往下看

3/" #ifdef ABC " == " #if defined ABC " 这才是正确的写法 

相关列句,如4、5所写。
4/
#ifndef UartEnable0
#define UartEnable0
#endif

5/
#ifdef UartEnable0
  ABC
#elif defined UartEnable1
  ABC
#endif

------解决方案--------------------
谢谢了!
------解决方案--------------------
C/C++ code
#if defined ABC

------解决方案--------------------
#ifdef XXX 用来判断宏XXX是否定义过,比如之前#define XXX或gcc编译是有-DXXX选项。

#if 用来判断后面所跟的表达式是否为真,defined(XXX)返回XXX是否定义过的真假情况。
------解决方案--------------------
#ifdef identifier
#ifndef identifier
is equivalent to

#if defined identifier
#if !defined identifier


不知道标准里是怎么规定的,用#ifdef是到哪里都不会错的,不要计较这些东西。。。
------解决方案--------------------
#if define ABC
#elif define ABC 

没有这样的预编译指令