语法杂记



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;
}

所以为什么包含一个头文件它会报错说重复定义  也是就这一个原因,因为拿进来编译了多次



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值