回复 24楼 peach5460
3你们说的这些我之前也是有所耳闻的,
关于那个宏定义防止重复定义的道理我想我是大概懂得的,因为自己写的代码就一直是遵循了这样的方法。
关于
编译器的预处理都做了些什么工作
我也了解过一些。
我的问题的关键不在这里,而是在后面:
为什么不在头文件里写我前面提到的那样几句代码就会报错。
基于前文所述的理解,写上那些代码的话要通过编译器的预处理进行“排除重复”【这里我不想讨论具体是采用了什么样的技术或者原理进行了“排除重复”,只是表达了这样一个意
思:在编译器未进行“排除重复”工作之前,代码确实是有重复的部分存在】
而我的疑问是:
如果我不在头文件里写那几行代码,是不是也应该是“不缺代码”的,只是编译器不用进行“排除重复”的工作了而已,我认为这样做也不应该是错误的。就是我们的代码没有重复的部
分了而已。且不论这样做是否有益,我所强调的是:这样做不该是错误的做法!
而实际情况是:
这样做却是错误的!要想不报错,就得在头文件里写上那几行代码,这与之前的理解完全相矛盾。甚至可以推测“编译器根本就没有进行排除重复工作,因为在它看来,在头文件里有那
几行代码是没有形成重复的”,而这一点与我之前的理解相违背。
【我的这个提问,目的不是为了问怎样去避免代码出现重复定义,也不是为了知道编译器是如何处理或者避免重复代码,我想知道的是:为什么我觉得会出现重复代码的情况下,我删除一部分的重复代码会出错,或者说,为什么我认为会出现重复代码的情况下,编译器却认为并没有重复代码出现。所以我质疑我之前的概念:头文件不单独编译,只是遇到包含语句的时候全盘复制过去。。。因为这个观点在这个情况下是解释不通的】