可爱颂中文谐音歌词,西安有晴天,艺术考前培训
1.多文件编译、链接的原理
在讲解和关键字的时候,我们已经给出了几个简单的多文件的例子,现在不妨再看一个例子。
main.c :
2.c语言模块化编程中的头文件
上节我们编写了 main.c 和 module.c 两个源文件,并在 module.c 中定义了一个函数和一个全局变量,然后在 main.c 中进行了声明。
不过实际开发中很少这样做,一般是将函数和变量的声明放到头文件,再在当前的源文件中 #include 进来。而且,全局变量最好声明为 static,只在当前文件中可见,不要对外暴露;如果必须对外暴露,可以使用宏定义代替,请看下面的代码。
main.c 源码:
3.c语言标准库以及标准头文件
源文件通过编译可以生成 .obj 文件(二进制库文件),并提供一个头文件向外暴露接口,除了保护版权,还可以将散乱的文件打包,便于发布和使用。
实际上我们一般不直接向用户提供 .obj 文件,而是将多个 .obj 文件打包成 .lib 文件(静态库)或 .dll 文件(动态库)。
.obj 打包成 .lib 或 .dll 也要经过链接的过程来找到函数入口、变量声明等,在vc中可以直接创建相应的工程来生成(与创建 win32 console application 类似,后续会讲解)。
.lib 和 .dll 可以看成是一堆 .obj 的集合,虽然有入口函数,但不能直接运行,必须被链接到 .exe 或被 .exe 调用。
c语言在发布时已经将常用的函数、宏、类型定义等打包到了静态库,并提供了相应的头文件。如果你使用的是vc,那么在安装目录下的\vc98\include\ 文件夹中会看到很多头文件,包括我们常用的 stdio.h、stdlib.h 等;在\vc98\lib\ 文件夹中有很多 .lib 文件,这就是我们链接时要用到的静态库。
例如我的 vc6.0 安装在c:\program files\microsoft visual studio\ 目录,那么 vc6.0 附带的所有头文件都在c:\program files\microsoft visual studio\vc98\include\ 目录下,所有 .lib 文件都在 c:\program files\microsoft visual studio\vc98\include\lib\ 目录下。
如果忘记 vc6.0 的安装目录或者头文件不在安装目录下,可以通过以下方式找到:
1) 在工具栏中点击“工具”按钮
2) 在二级菜单中选择“选项”
3) 在弹出的对话框中选择“目录”标签
4) 然后选择名字为“目录”的下拉菜单中的“include files”一项,如下图所示:
ansi c 规范共定义了 15 个头文件,称为“c标准库”,所有的编译器都必须支持,如何正确并熟练的使用这些标准库,可以反映出一个程序员的水平:
复制纯文本新窗口
4.c语言头文件的特性和规范
头文件通过 #include 命令包含到当前文件,效果与直接复制头文件的内容相同;编译器在预处理阶段实际上也是这样做的。
不管是标准头文件还是我们自己编写的头文件,都应该遵循等幂性:可以多次包含相同的头文件,但效果与只包含一次相同。
等幂性很容易实现,对于大多数的头文件可以使用宏保护。例如,在 stdio.h 中可以有如下的宏定义:
5.c语言头文件的路径
引入编译器自带的头文件(包括标准头文件)用尖括号,引入自定义头文件用双引号,例如:
6.一个比较规范的c语言多文件编程的例子
这一节向大家展示一个比较规范的多文件编程的例子,将前面几节的知识运用起来。
通过 vc 6.0 创建一个工程,保存到 e:\demo 目录,工程文件有:
main.c 源码:
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
如何在没有core文件的情况下用dmesg+addr2line定位段错误
用QT制作3D点云显示器——QtDataVisualization
网友评论