1.好像有这样一道面试题
#include <iostream>
#define int* T
typedef int* K;
using namespace std;
int main()
{
T i,j;//这里的i,j是什么类型
K i1,i2;//这里的i1,i2是什么类型
return 0;
}
这里的define仅仅是在编译时期的字符串替换,但是typedef是类型的别名,所以在编译后,
T i,j; ==》int *i,j; 自然i是int*,而j是int
然而K这里是类型的定义 所以 i1和i2都为int*类型
既然讲到了预编译符(#),那么其实#include这个包含也是一样的,在编译时期它会把头文件拿过来相当于直接粘贴到你包含头文件的地方
#include <iostream>
using namespace std;
int main()
{
return 0;
}
实际上它是这样的在编译时期
namespace std //这个为iostream的文件 长度限制只能放这么多
{
.......
} // namespace std
#endif /* _GLIBCXX_IOSTREAM */
using namespace std;
int main()
{
return 0;
}
所以为什么包含一个头文件它会报错说重复定义 也是就这一个原因,因为拿进来编译了多次