锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

C程序中关于c和h的包含问题

时间:2024-05-03 19:07:10

首先声明一下:下面文章都是网络搜索结果,本人浮躁的心情决对没有时间这样仔细地解释问题的,所以我要感谢一下原作者,辛苦了!由于学M32的关系,需要重点理解“看似没有调用,实际上却包含了”的技巧,这个技巧本人在没有读过文章之前还确实不理解。
*********************************************************************************************************************************************************************

很多人对C语言中的 “文件包含”都不陌生了,文件包含处理在程序开发中会给我们的模块化程序设计带来很大的好处,通过文件包含的方法把程序中的各个联系起来是模块化程序设计中的一种非常有利的手段。

文件包含处理是指在一个源文件中,通过文件包含命令将另一个源文件的内容全部包含在此文件中。在源文件编译时,连同被包含进来的文件一同编译,生成目标目标文件。

很多人再初学时都会对这个很晕,怎么写文件件? 怎么包含才能避免重定义? 等等问题。。。 其实这个只要了解了文件包含的基本处理方法就可以对文件包含有一个很好的理解与应用了,下来我们一起来看一下: 文件包含的处理方法:
首先大家需要清楚:
(1) 处理时间:文件包含也是以"#"开头来写的(#include ), 那么它就是写给预处理器来看了, 也就是说文件包含是会在编译预处理阶段进行处理的。

(2) 处理方法:在预处理阶段,系统自动对#include命令进行处理,具体做法是:降包含文件的内容复制到包含语句(#include )处,得到新的文件,然后再对这个新的文件进行编译。
抓住这两点,那么这个东东就没有什么难的了。。。
一般情况下文件包含分为两种:包含.h文件 和 包含.c文件 1. 当然对于这两情况也都是按照上面说的方法来处理的。呵呵,这个肯定是没得说的.
2.包含.c文件 和编译多文件程序 是不同的。
多文件程序:是在源文件编译时把多个文件进行编译、连接在一起生成一个可执行文件。
包含.c文件:按照我们上边的说法则是把多个文件合并为一个文件进行编译。
接下来通过例子看一下:
(1)包含.c文件:
1: //file1: main.c 2: #include 3: #include "fun.c" 4: int main() 5: { 6: int a=5,b=19; 7: c = a; 8: sun(a,b); 9: printf( "c=%d\n",c); 10: return 0; 11: } 12: //end of file1 1: //file2: fun.c 2: int c=0; 3: void sun( int a, int b) 4: { 5: printf( "a+b=%d\n",a+b); 6: c=0; 7: printf( "c=%d\n",c); 8: } 9: //end of file2 10: 这个例子是采用 包含.c文件 的方法实现的。 在编译时,直接去编译main.c文件,预处理器会先把fun.c文件中的内容复制到main.c中来,然后再对新的main.c进行编译。
编译命令:
gcc main.c -o main 可以看到,这里并没有对fun.c进行编译,但还是生成了最终的main可执行程序。 也可以通过命令来观察一下预处理的结果: 编译命令:
gcc -E main.c -o main.cpp
在main.cpp文件末尾可以看来下面一段代码:
1: //main.cpp文件中 2: 931 # 2 "main.c" 2 3: 932 # 1 "fun.c" 1 4: 933 //注意这里是fun.c里边的内容 5: 934 int c=0; 6: 935 void sun( int a, int b) 7: 936 { 8: 937 printf( "a+b=%d\n",a+b); 9: 938 c=0; 10: 939 printf( "c=%d\n",c); 11: 940 } 12: //这里是main函数 13: 941 # 3 "main.c" 2 14: 942 int main() 15: 943 { 16: 944 int a=5,b=19; 17: 945 c = a; 18: 946 printf( "c=%d\n",c); 19: 947 sun(a,b); 20: 948 printf( "c=%d\n",c); 21: 949 return 0; 22: 950 } 可见,其实就是将fun.c文件中的内容添加到了main函数之前,然后对新的文件进行编译,生成最终的可执行程序。 (2)编译多文件程序:
同样是上边的例子,把main.c中“ #include "fun.c" ”注释掉,加上一句:“extern int c;”因为 c 变量在另外一个文件(fun.c)中定义。 1: //file1: main.c 2: #include 3: //#include "fun.c" //注释掉
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章