首页 > C语言中两个宏进行大小对比,其中一个没有定义,这种行为如何定义。

C语言中两个宏进行大小对比,其中一个没有定义,这种行为如何定义。

1.C语言中两个宏进行大小对比,其中一个没有定义,这种行为如何定义呢?
在学习U-boot的过程中遇到这么一个定义:

# if    (CONFIG_ENV_ADDR >= CONFIG_SYS_MONITOR_BASE) &&     \
    (CONFIG_ENV_ADDR + CONFIG_ENV_SIZE) <=          \
    (CONFIG_SYS_MONITOR_BASE + CONFIG_SYS_MONITOR_LEN)
#  define ENV_IS_EMBEDDED                                                                                                                        
# endif

我这里主要看CONFIG_ENV_ADDR >= CONFIG_SYS_MONITOR_BASE
CONFIG_ENV_ADDR这个宏确实是有定义的,但是CONFIG_SYS_MONITOR_BASE我确实没有定义的,在u-boot最后生成的include/autoconf.mk中也没有查看到这个宏的值,说明这个宏确确实实真没有。
然后我们自己手动写一个代码

  1 #include <stdio.h>
  2 
  3 #define CONFIG_ENV_ADDR 100
  4 int main(int argc, char *argv[])
  5 {
  6 # if (CONFIG_ENV_ADDR >= CONFIG_SYS_MONITOR_BASE)
  7     printf(">=\n");
  8 #else
  9     printf("==\n");
 10 #endif
 11     return 0;
 12 }
 13 
 14                

gcc -E tesr.c -o test_1.c
预处理后查看到的结果是

840 int main(int argc, char *argv[])
841 {
842 
843  printf(">=\n");
844 
845 
846 
847  return 0;
848 }    

请问有大神知道相关点吗?C语言没学好啊!


有些macro是编译过程中有compiler自己定义的。这个貌似是这种情况。

【热门文章】
【热门文章】