1。让我们聊聊吧。今天分享的是一个比较生僻的C语言知识点。大家平时都用过#include"xxx.h"。您应该很少或几乎不会将.c文件视为头文件。那么今天就和大家一起来了解一下虫菌吧。2.操作一波,先体验一波#include"xxx.c"文件:01体验参考demo://FileName:main#include#include/********************************.c文件声明区******************************/#include"module1.c"#include"module2.c"/***************************函数:main*作者:(公众号:最后一个bug)***************************/intmain(intargc,char*argv[]){Fuction1();Fuction2();printf("欢迎关注公众号:最后一个bug\n");return0;}//FileName:Module1.c#include/****************************Function:Fuction1*Author:(公众号:Lastbug)*************************/voidFuction1(){printf("RunFuction1\n");}//文件名:Module2.c#include/***************************功能:Fuction2*作者:(公众号:Lastbug)**************************/voidFuction2(){printf("RunFuction2\n");}输出结果:分析取一看:看来这波操作是可行的,而且好像省略了.h文件。bug菌之前说过,在分析.h文件的时候,直接在对应.c文件的位置展开.h文件,然后再进一步分析。但是,其实这个.c文件也是一样的,再往下看。02加深理解,参考demo://FileName:main#include#includechar*cBug1="bugNo1";//这里是1char*cBug2="bugNo2";/*******************************.c文件声明区***************************/#include"module1.c"#include"module2.c"//char*cBug1="bugNo1";//这里是位置2//char*cBug2="bugNo2";/********************************函数:main*作者:(公众号:最后一个bug)*************************/intmain(intargc,char*argv[]){Fuction1();Fuction2();printf("欢迎关注公众号:最后一个bug\n");return0;}//FileName:Module2.c#include/****************************函数:Fuction1*作者:(公众号:最后一个错误)**************************/voidFuction1(){printf("RunFuction1\n");printf("%s\n",cBug1);}//文件名:Module2.c#include/****************************函数:Fuction2*作者:(公众号:最后一个错误)**************************/voidFuction2(){printf("RunFuction2\n");printf("%s\n",cBug2);}输出结果:分析一下:我们在位置1定义了两个变量,成功编译运行得到如上结果,符合我们的预期。但是,当我们去掉位置1,定义位置2时,程序无法编译,这似乎符合我们的预期,即编译过程中会直接展开.c文件。3、有什么用?这种方法在长期的codingbug中一般只用在两种情况下:1)维护未设计的代码有些历史悠久的项目已经被N个以上的大佬蹂躏过,说实话代码结构已经很吓人了.通常每个源文件的内容都很长。为了保持代码原样,会使用#include"xxx.c"来嵌入这些相关文件,也方便后期维护。2)测试代码在前期调试软件时,可能会在不同的文件中插入不同的测试函数。这种方法很容易引入和淘汰。比如你需要对源文件中的一些静态变量进行监控和处理,但是又不想在这个文件中加入测试代码,那么可以在#include"xxx.c"中编写测试函数以供使用,例如://文件名:main#include#includestaticinta=5;/*****************************.c文件声明区***************************/#include"module1.c"/***************************功能:main*作者:(公众号:Lastbug)*************************/intmain(intargc,char*argv[]){Fuction1();printf("main%d\n",a);printf("欢迎关注公众号:最后一个错误\n");return0;}//文件名:Module2.c#include/*****************************Function:Fuction1*Author:(公众号:最后一个bug)***************************/voidFuction1(){printf("RunFuction1\n");printf("Fuction1%d\n",a);}注意!!然后之前有朋友说:“static的作用域只在对应的文件中”,通过上面的Ifmultiple.cfilesofmultiple.cfilesusestaticavariables,那么这位小伙伴的表述就不太贴切了!4.最后总结一下,正常开发过程中不建议使用#include"xxx.c"bug菌,因为在我们程序的设计过程中,.h文件是外部引用接口,.c是对应的内部实现,如果滥用#include"xxx.c",可能会导致重复定义功能等,同时也会给调试相关程序带来一些麻烦,当然如果你用的顺手的话,是没有问题的。不过对于喜欢写长文件的朋友。把一个很长的.c文件分成多个.c文件,这样至少可以给不会用的同事炫耀一下!