任何C程序最终都是要写在文件上面,通常分两种,源文件和头文件,不是每个程序都有头文件,比如一些简单小程序就没有。
源文件根据惯例,通常扩展名为.C,但是能否用其他扩展名吗?查了一些资料,得到的答案是:尽管标准并没有制定文件的取名规则,但大多数环境都存在你必须遵守的文件名命令约定。
头文件根据惯例,通常扩展名为.h。通常是一个源文件对应一个的头文件,并且两个文件名相同,只是扩展名不同。我一直有个疑惑,就是可以让源文件和头文件两个文件名不同吗?经过亲自折腾一下,确是可以的。经过细想,原因如下:头文件只是用于共享宏、变量、函数等的。而且#include的语义是把对应的文件包含进来,至于包含的文件是什么名字并不重要,要不要和源文件名相同也不重要,如果非要一样,反而限制了#include的能力。另外C99标准中有这样关#include有这样一句话:A #include directive shall identify a header or source file that can be processed by the implementation.也就是说指要编译器支持的文件,#include指令应该都可以包含。一般编译器的功能都挺强大,足够满足我们需求,至于遇到特殊情况的大佬,大佬也会自行解决。
聊到头文件 那就有必要对#include指令进行说明:
#include指令常用格式如下:
#include , #include "fileName" #include token(这里token一般指宏的名字)
如果在源文件#include包含有一个static变量或函数的定义的头文件,那么这个源文件也可以访问这个static变量或函数。原因就是这个源文件把对应的文件包含进来,那这些static变量或函数就相当于在这个源文件中定义,当然源文件就可以访问了。
10 在代码正确的情况下,把代码建立成头文件,即.h时无法执行程序,而若把代码建立成源文件。即.cpp时则运行成功,说是应该建立成源文件的建立成头文件了,即"h1.h",应该建立成"h1.cpp",应该是"c++ Source File",而不是"C/C++ Header File,是怎么回事?为什么? 补充: 如果要编写一个程序,在无头文件的情况下,是先编写头文件,还是先编写源文件? 满意答案Treen3级2009-02-10大家对头文件都有一定的误解\x0d\x0aC,C++程序,本质上只需要\x0d\x0a.C,.CPP文件就可以.这两个文件会被编译器编译生成模块.\x0d\x0a头文件其实就是一个额外的文本文件,\x0d\x0a#include这个预编译命令会把这个文本文件中的内容插入到这个指令的位置.\x0d\x0a在CPP文件中使用#include命令来包含一个头文件,相当于把头文件中的代码拷贝到CPP文件中调用该预编译指令的位置.\x0d\x0a之所以要用到头文件,那是因为在编译过程中,一个CPP中如果要调用或使用另外一个模块中的函数或其它符号,就必须先写这个函数或符号的声明.\x0d\x0a比如void funB()\x0d\x0avoid funA(){funB()}void funB(){}funA要调用funB,你们在funA之前就必须先有funB的声明,有了这个funB的声明,无论funB的定义在哪,funA都能被编译通过了.只要链接时能在所有模块中找到这个funB,你们程序就能链接成功,执行了.\x0d\x0a正因为这个关系,所以我们一般为一个CPP中的所有函数都写一个声明在对应的H文件中,这样,其他CPP只要包含了这个H文件,就有了这个CPP中所有函数或符号的声明,就可以使用这个CPP中实现的函数或定义的符号了.没有头文件,程序也是完全可以的,只是你每次调用其他CPP中的函数时,都得自己在CPP中再写一遍你要调用的函数的声明.\x0d\x0a说的不够详细,不知道大家能否理解.\x0d\x0a头文件就是一个代码文本,放一些声明,让其他源代码文件来包含的.因为会被多个CPP包含,所以当你把定义放到头文件中时,如果有两个或以上地方包含了这个头文件,那么这个定义就也会有多份(因为预处理指令#include 做的是完全的代码拷贝),就会出现重复定义的错误 提问者 的感言: 谢谢! 2009-02-13其他回答(8) 热心问友 2009-02-06.h里面主要放声明,因为其他.cpp可能要引用.h,.h文件由预编译器处理,正式编译器不处理这个文件,所以里面放实现代码会出错\x0d\x0a比如你要编译一个程序 那么代码应该要写在.cpp的文件里,但是要用到一些数学函数之类的 那么 你就要加载一些文件,那些文件可以是 如 输入输出函数库文件 stdio.h过儿~~~6级2009-02-06头文件被包含在源文件里,要应用某个函数就要写上相应的头文件,而头文件是在源文件里的.当我们写好了一个源文件,如果愿文件有某种一般功能,我们可以保存起来,以后在写别的愿程序代码时通过些头文件,便可直接应用里面的函数了.28岁的梦7级2009-02-06你要知道头文件的用处:当你在程序调用当前没有申明的函数是,编译器会根据头文件去找那个函数。\x0d\x0a言外之意头文件只是给编译器提供搜索函数的地方。所以不能编译和执行了。更多回答相同点:\x0d\x0a头文件与源代码都是源文件,都用纯文本文件存储,都需要遵照C/C++语言规范来写,都可以使用类型定义和常、变量定义,都可以包含函数的声明和实现,都能包含宏定义,都使用相同的调用规范。\x0d\x0a\x0d\x0a不同点:\x0d\x0aC/C++的编译器规定源代码文件必须包含函数入口,即main函数,或者winmain函数。而头文件不得包含函数入口,也就是说,头文件不可以单独编译成一个程序,仅仅包含程序片断或者仅仅定义常、变量。\x0d\x0a\x0d\x0a关联:\x0d\x0a头文件是专为源代码调用而写的静态包含文件,可被源代码文件中的#include编译预处理指令解释,而将头文件完整拷贝到源代码的指令处,从而在编译时相当于在源代码中插入了函数声明或者实现。\x0d\x0a\x0d\x0a某些头文件包含了静态库中的函数调用声明,包含了LIB文件的调用信息,编译时静态链接进程序;而某些头文件是专为方便API调用而写的,里面包含了动态链接库的调用信息和规范,只有在运行时将DLL载入内存提取函数执行。\x0d\x0a\x0d\x0a也就是说,其实你将头文件里的信息完全写到源代码里,是可以实现完全相同的功能的。如果你想要学写头文件,可以参照标准C/C++库的h文件。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)