C语言模块化编译介绍

模块化编程的概念

  所谓模块化变成(多文件开发),就是多文件(.c文件)编程,一个.c文件和一个.h文件可以被称为一个模块。

头文件开发的注意事项:

1)头文件中可以和C程序一样引用其它头文件,可以写预处理块,但不要写具体的语句。

2 可以声明函数,但不可以定义函数

3 可以声明常量,但不可以定义变量

4)可以“定义”一个宏函数。注意:宏函数很象函数,但却不是函数。其实还是一个申明。

5)结构的定义、自定义数据类型一般也放在头文件中。

6)多文件编程时,只能有一个文件包含 main() 函数,因为一个工程只能有一个入口函数。我们 把包含 main() 函数的文件称为主文件。

7)为了更好的组织各个文件,一般情况下一个 .c 文件对应一个 .h 文件,并且文件名要相同, 例如 fun.c 和 fun.h。 一个文件,声明在.h文件,实现在.c文件,.h和.c文件必须同名。

8)头文件要遵守幂等性原则,即可以多次包含相同的头文件,但效果与只包含一次相同。

9)防止重复包含的措施

头文件的使用场景:

1. 通过头文件来调用库函功能

一些源代码不方便或者不允许向用户公布,只需要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口来声明和调用库功能,二不关心接口是怎么实现的。

2. 多文件编译

将稍大的项目分成几个文件实现,通过头文件将其他文件的函数声明引入到当前文件。

3. 头文件能加强类型安全检查

如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。

#include < > 和 #include " "

#include " "

包含的是一个用户定义的文件,可以是头文件,也可是普通文件

1、在当前文件所在的路径下查找

2、如果上面没有找,到编译器include路径查找

3、如果编译器include路径下没有找到,系统的include路径下查找

4、如果上面三个都没有找到就报错了。

当前文件夹 ----->编译器include ---->系统include----->(如果找不 到)报错

#include <>

包含一个系统(编译器自带)的头文件

1、编译器的include路径下查找

2、如果没有找到就系统include路径下查找

3、如果都没有找到就报错

编译器include ---> 系统include--> (如果找不到)报错

Xcode自带编译器 include:/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Develope r/SDKs/MacOSX10.10.sdk/usr/include/

Mac系统的include路径有: /usr/include /usr/local/include

include 不一定非要写在第一行

使用条件编译指令可以防止头文件的重复包含

#ifndef C7________xxx_h

#define C7________xxx_h

#endif

C语言模块化编译介绍的更多相关文章

  1. 转:C语言的编译链接过程的介绍

    11:42:30 C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接.编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程.链接 ...

  2. 【腾讯开源】前端预处理器语言图形编译工具 Koala使用指南

    摘要:Koala是一款预处理器语言图形编译工具,支持Less.Sass.CoffeeScript.Compass框架的即时编译.无需手动输入命令去编译,后台监听文件是否有改变,如有修改会自动进行编译, ...

  3. c语言模块化编程

    C语言模块化编程(封装) 模块即是一个.c 文件和一个.h 文件的结合,头文件(.h)中是对于该模块接口的声明.模块化的实现方法和实质:将一个功能模块的代码单独编写成一个.c文件,然后把该模块的接口函 ...

  4. 【Go语言入门系列】Go语言工作目录介绍及命令工具的使用

    [Go语言入门系列]前面的文章: [保姆级教程]手把手教你进行Go语言环境安装及相关VSCode配置 [Go语言入门系列](八)Go语言是不是面向对象语言? [Go语言入门系列](九)写这些就是为了搞 ...

  5. C语言的编译过程、安装gcc编译器以及设置环境变量

    以我对C语言编译过程的了解,我用了一点时间画了一个图,提供给大家参考一下,希望有些能对您的问题提上帮助. 前几天刚初步学习了C语言的编译过程,感触挺深的.在C语言中头文件其实起了一个很大的作用. 1. ...

  6. Koala – 开源的前端预处理器语言图形编译工具

    koala 是一个前端预处理器语言图形编译工具,支持 Less.Sass.Compass.CoffeeScript,帮助 Web 开发者更高效地使用它们进行开发.跨平台运行,完美兼容 Windows. ...

  7. [SQL]SQL语言入门级教材_SQL语言基本语句介绍(四)

    SQL语言基本语句介绍 • 表的建立 关系数据库的主要特点之一就是用表的方式组织数据.表是SQL语言存放数据.查找数据以及更新数据的基本数据结构.在SQL语言中,表有严格的定义,它是一种二维表,对于这 ...

  8. 李洪强漫谈iOS开发[C语言-004]-开发概述程序设计语言程序编译过程

    汇编语言 指令用特定的名字来标记,这就是汇编语言 人比较容易看懂汇编语言 汇编直接和程序一一对应的 有汇编器把程序翻译成机器码 把高级语言编译成计算机识别的语言 程序编译过程 命令行 UNIX 系统中 ...

  9. C语言的编译过程和GCC编译参数

    C语言的编译一般有三个步骤: 预编译: gcc -E -o a.e a.c 预编译a.c文件,生成的目标文件名为a.e 预编译就是将include包含的头文件内容替换到C文件中,同时删除代码中没用的注 ...

随机推荐

  1. 关于sass的安装

    关于sass的安装真是费了九牛二虎之力,这么说一点都不夸张,好了我就不多浪费口水了,直接进入正题 1.首先要安装ruby,这个大家可以去度娘上查询,很好安装的,相信大家的智慧与实力都是可以安装成功的 ...

  2. JavaScript浏览器对象(BOM)中有关设备、浏览器屏幕高度和宽度的API介绍

    JavaScript世界中,有很多看起来能够帮我们知道网页宽度和高度的API,但太繁多了,而且容易弄混.不容易区分它们.下面我就来介绍一下,这些API到底是什么意思,之间的区别又在哪里. 一.设备的分 ...

  3. webDriver 执行杀死浏览器进程方法

    /**     * 执行dos命令     * @param command     */    public static void command(String command) {       ...

  4. AChecker + Selenium2对需要登录的页面进行自动化可访问性测试

    前言:这段时间还算比较空闲,我准备把过去做过的有些形形色色,甚至有些奇怪的研究总结一下,也许刚好有人用的着也不一定,不枉为之抓耳挠腮的时光和浪费的电力.   名词解释: 网站可访问性测试:国内基本没有 ...

  5. Kanzi Q&A

    Q:为什么我的kanzi studio安装完后无法编译apk? A:请安装jdk,并设置环境变量,并更新thirdpartsdk. Q:为什么使用路径无法读取到列表listbox内的列表项? A:列表 ...

  6. 用jQuery基于原生js封装的轮播

    我发现轮播在很多网站里面都用到过,一个绚丽的轮播可以为网页增色不少,最近闲来无事,也用原生js封装了一个轮播,可能不像网上的插件那么炫,但是也有用心去做.主要用了闭包的思想.需要传递的参数有:图片地址 ...

  7. NHibernate Query

    1) Sql Group by .... 之前是这么写的,因为DateTime是YYYY-MM-DD HH:mm:SS 模式,我只想group 日期.这种写法再mysql,sqlserver.orac ...

  8. iis设置asp站点

    在 IIS 6.0 中,默认设置是特别严格和安全的,这样可以最大限度地减少因以前太宽松的超时和限制而造成的攻击.譬如说默认配置数据库属性实施的最大 ASP 张贴大小为 204,800 个字节,并将各个 ...

  9. session,ajax 跨域cookie

    什么是Session, 什么是Cookie? Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID为标识符来 ...

  10. /etc/xinetd.conf 和 /etc/xinetd.d/*【新网络服务配置】

    http://blog.csdn.net/kelven2004/article/details/1701930 xinetd 是 inetd 的安全加强版,它内置了自己的 TCP wrapper, 可 ...