以下是引用蚕头燕尾在2013-11-3 09:55:58的发言:
我就是特别想明白,到底我们所说的“头文件就像是一个要被用于复制的母本,凡是有包含它的地方就全部抄过去。”这句话
是一种逻辑上的等价理解,还是说编译器实际上就是的的确确这么做的?
如果的确就是这么做的,为什么不会重复包含?明明就是头文件里已经写了这些语句了的,你在别的已经包含了这个头文件的文件里再写一遍,不是写重复了吗?
至于:
#ifndef XXX
#define XXX
...
#enddef
我知道这是常用的用于避免“无意间”重复定义了某个东西,比如说class
但是我现在的问题是:
我觉得头文件里没有必要去写
#include
#include
using namespace std;
这样的东西,或者说我觉得根本就是非常的不应该在头文件里写这些语句!因为客户程序员根本不知道你已经在头文件里包含了iostream这样的东西了呀,
他自然会在使用这个类的时候再包含一遍iostream这样的东西,如果项目很大的话,岂不是就像是明明有用的代码只有一万行,而我们却要编译三万行这样的?
我想为什么就不能养成一个好的编码习惯,让写出的代码尽可能的“没有废话”呢?
【但愿我表达清楚了】
1,编译器确实是这么做的...
你问这个问题说明你看书看到include宏的时候不仔细...
include其实就是个文件拷贝替换...
2,为什么不会重复包含,因为有类似下面我写的那些防止重复的宏...
你说你知道这些宏是防止重复,我怎么感觉你不知道呢?
3,一般而言,尽量少在头文件里include东西,转而使用前置声明来声明相应的类型...
暂时不展开,呵呵...
你先自己领悟一下...
我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...