c++语言中的预处理问题

lws123253 发布于 2016/03/07 14:54
阅读 139
收藏 0
c++

#include <iostream>
#define LENGTH sizeof(array)/sizeof(array[0])
using namespace std;
int array[]={1,2,3,4,5}; 
int main(int argc, char** argv) {
cout<<LENGTH<<endl;
return 0;
}

在上面的代码中,预处理中用到了LENGTH这个宏,但是我不明白的是,在处理那个语句的时候,编译器怎么知道有array这个数组的存在。因为我想的既然是预处理,它在编译之前。而且数组的定义也在该语句之后。所以这里不明白,谢谢大家。


加载中
1
Karblue
Karblue

cout<<LENGTH<<endl;等价于cout<<sizeof(array)/sizeof(array[0])<<endl

编译器只用把宏替换到对应的位置(预处理过程) 

实际编译的时候就知道array存不存在了。

0
淮河一梦
淮河一梦
编译器只用把宏替换到对应的位置,编译时在定义宏的位置不作变量检查,而是在宏被替换的位置检查。
0
xpbob
xpbob
宏确实在编译时就行代码的替换,你的代码先会被替换掉编译,最后编译的一定是你替换后的代码
0
木兰宿莽
木兰宿莽
先预编译过程,这个期间LENGTH这个东西就会被替换掉,所以编译时根本就没有LENGTH这个宏
0
芒鱼
芒鱼
c陷阱与缺陷里讲过,与处理器只是单纯的替换
返回顶部
顶部