关注程序的接口

刚开始写多文件的大程序的时候不是很理解为什么一个.c文件就要有一个与它同名的.h文件,只会依葫芦画瓢瞎搞。首先说最重要的一点,.h文件是同名.c文件的接口。

  1. 编译标识符
    #ifndef ABC_
    #define ABC_
    **
    **
    _#endif
    这个结构是方便模块包含更底层的模块,防止重复包含,主要是针对那种一个模块通过两个地方扇入上层的地方,C++里面的虚继承也是实现了这么一个功能。

  2. 就是文件自己不也是要包含一些子模块的.h子文件嘛,那这些子模块的.h子文件放在哪的问题,一开始不懂的时候一股脑全放.c文件里面。其实应该根据这个模块暴露给外部的接口来选择,如果放.c文件里面,那我就仅仅是包含了子模块的.h子文件,该子模块的功能我在.c里面都能用,但是别的文件再包含我的.h文件的时候,这个子模块它是看不到的,它只能看的到我自己.h文件所提供给它的一些操作。如果,把子模块的.h子文件放在.h文件里,那我包含.h文件的时候也同时包含了子模块的.h子文件。这个好处在哪里体现呢,适合那种一层层包含的模块,上层模块除了操作直接的下属子模块,还要操作它子模块的子模块呀。.h文件就相当于提供了一个向下包含所有操作的暴露给上层的接口。

  3. extern声明的问题,刚开始用的时候傻傻搞不清哪里该extern,其实在.c里面声明,在.h文件里extern就行了,包含了.h文件就extern了。

  4. 只有需要暴露给外部 ,提供给外部操作的函数才需要声明到.h里面,那些只在.c文件内使用的函数不应该放到.h文件里,相当于不需要声明为全局变量的就不要瞎声明,这个在C++里面是靠public, private来保护的,C++还提供一个protected。

总之一句话,.h文件是接口,什么该暴露给外部什么不应该暴露要好好考虑。这些接口算是输出接口,现在不是很懂的是怎么写好输入接口。

如有错误或者不完善的地方,恳请指正。

你可能感兴趣的:(关注程序的接口)