♓ 规则2:禁止头文件循环依赖。 说明:头文件循环依赖,指a.h包含b.h, b.h包含c.h, c.h包含a.h之类导致任何一个头文件修改,都导致所有包含了a.h/b.h/c.h的代码全部重新编译一遍。 而如果是单向依赖,如a.h包含b.h, b.h包含c.h,而c.h不包含任何头文件,则修改a.h不会导致包含了b.h/c.h的源...
A.h里面只包含A.h所写内容要用到的.h文件,很多时候A.h里面无需任何.h文件.而在A.c文件内就要写成 #include "B.h" #include "C.h" #include "D.h"。而且两个文件的.c文件在头文件包含上可以互相包含。如图二所示。 项目中遇到的这个头文件包含问题导致我重新搜索资料进行该问题的深入了解,故下文是通过...
本人曾经认为,一个.c文件对应一个.h文件,.c文件只包含它自身的.h文件就好,若.c文件中用到其他文件中的内容,则.h文件把用到的头文件包含进来就可以了。 这种思想在项目代码量小,工程文件少时貌似看不出问题,但随着工程文件数量越来越多,我发现了这种思想存在弊端:头文件互相包含,导致编译时自以为有些宏变量声明...
大部分产品修改一处代码,都得需要编译整个工程,对于TDD之类的实践,要求对于模块级别的编译时间控制在秒级,即使使用分布式编译也难以实现,最终仍然需要合理的划分头文件、以及头文件之间的包含关系, 从根本上降低编译时间。 《google C++ Style Guide》 1.2 头文件依赖 章节也给出了类似的阐述:若包含了头文件aa.h,则...
说明:头文件过于复杂,依赖过于复杂是导致编译时间过长的主要原因。很多现有代码中头文件过大,职责过多, 再加上循环依赖的问题,可能导致为了在.c中使用一个宏,而包含十几个头文件。 某个头文件不但定义了基本数据类型WORD,还包含了stdio.h syslib.h等等不常用的头文件。
本规则,反过来并不一定成立。有些特别简单的头文件,如命令ID定义头文件,不需要有对应的.c文件存在。 规则2: 禁止头文件循环依赖 说明:头文件循环依赖,指a.h包含b.h, b.h包含c.h, c.h包含a.h之类导致任何一个头文件修改,都导致所有包含了a.h/b.h/c.h的代码全部重新编译一遍。
程序木影响,但是重复包含会降低编译效率,因为每遇到一个include都需要进行翻译成代码的过程, 所以为了防止重复包含,一般在头文件中会加入如下条件编译代码,如下: 对于这些只做了解既可,因为在IDE中新建c文件时会自动帮你加上这些判断。 循环包含问题: 对于上面的重复包含头文件是不影响程序运行的对吧,但是如果是循环...
♓ 规则2:禁止头文件循环依赖。 说明:头文件循环依赖,指a.h包含b.h, b.h包含c.h, c.h包含a.h之类导致任何一个头文件修改,都导致所有包含了a.h/b.h/c.h的代码全部重新编译一遍。 而如果是单向依赖,如a.h包含b.h, b.h包含c.h,而c.h不包含任何头文件,则修改a.h不会导致包含了b.h/c.h的源...
可能会出现死循环,示例如下: 代码语言:javascript 复制 #include<stdio.h>intmain(){int i=1,sum=0;while(i<=100)sum+=i;i++;printf("Sum=%d",sum);return0;} 只是在前面的基础上去掉了大括号,再运行会发现程序堵塞,一直不输出结果,查看CPU占用情况会发现编译器占用了大量的CPU,此时产生了死循环,因为...
#include的意思是头文件包含,#include<stdio.h>代表包含stdio.h这个头文件。std是一个标准库,i:input,o:output,标准输入输出库,.h头文件。 #include< >与#include" " 的区别:< > 表示导入系统文件," "表示导入自定义文件。 (2) main函数 main函数是C语言的程序的入口,程序的主函数,程序有且只有一个主函...