关于#define 定义的先后顺序

来源:互联网 发布:数控下料机编程 编辑:程序博客网 时间:2024/05/22 21:02

#define定义先后顺序

今天查看代码的过程中,看到如下宏的定义

/*
 * Size of malloc() pool
 */
#define CFG_MALLOC_LEN  (CFG_ENV_SIZE + 1024*1024)

 

#define CFG_ENV_SIZE  0x4000

 

给我的第一感觉就是,是不是其他地方有CFG_ENV_SIZE这个宏的定义,不应该CFG_ENV_SIZE这个的定义是在CFG_MALLOC_LEN的后面,然后我在大的源码目录结构下搜索,确实有很多,把我给整晕了,后来想想,宏的定义跟函数的定义是不一样的。

宏的定义是编译器先展开宏再编译的,也就是说,编译器会事先把出现宏的地方全部替换掉,所以定义他们的先后顺序就无关紧要了。

如果还不放心,写一小段代码如下:

#include<stdio.h>
#define MAX_SIZE MAX_TEST+1
#define MAX_TEST 2
int main(int argc,char *argv[])
{
 printf("%d\n",MAX_SIZE);
 return 0;
}
执行如下命令,对程序进行展开:

gcc -E main.c

出现如下的显示

已经对宏进行了替换

 

0 0
原创粉丝点击