网站首页 > 文章精选 正文
上一篇我们讲了C语言预处理阶段的宏定义,知道了C语言中宏定义的处理和使用。现将上篇关于宏的问题的答案公布如下:
用宏定义一个字符串常量
#define str "abc"
用带参数的宏实现求两个数的最小值
#define MAX(a,b)((a)<(b)?(a):(b))
用带##的宏实现两个字符串的连接
#define FUN(a,b) ##_##
我们这篇讲讲预处理阶段的文件包含和条件编译。
一.文件包含
什么是文件包含?
文件包含的格式如下:
#include"文件名"
通常,该文件是后缀名为"h""的头文件。文件包含命令把指定头文件插入该命令行位置取代该命令行,从而把指定的文件和当前的源程序文件连成一个源文件。简单的说就是直接粘贴到本文件中。
文件包含的作用
在程序设计中,文件包含是很有用的。一个大程序可以分为多个模块,而程序中的有些公用的符号常量或宏定义等可单独组成一个文件,在其它文件的开头用包含命令包含该文件即可使用。这样可避免在每个文件开头都去书写那些公用量,从而节省时间,并减少出错。
文件包含需要注意的
包含命令中的文件名可用双引号括起来,也可用尖括号括起来,如#include "myhead.h"和#include<myhead.h>。这两种形式的区别是:使用尖括号表示在系统指定的包含头文件的路径中查栈,不在当前目录下查找;使用双引号则表示先在当前目录中查找,若未找到才到系统指定的目录下查找。 一般系统提供的头文件我们用尖括号,自己书写的头文件我们用双引号。
一个include命令只能指定一个被包含文件,若有多个文件要包含,则需用多个include命令。
文件包含允许嵌套,即在一个被包含的文件中又可以包含另一个文件。
二.条件编译
条件编译的作用
通常我们编写的源文件中的代码都参加编译。但有时我们需要在满足一定的条件下再去编译一部分,不满足则编译另一个部分,这就是“条件编译”。
条件编译功能可按不同的条件去编译不同的程序部分,从而产生不同的目标代码文件。在程序的移植和调试中我们经常用到。
条件编译的形式
1.#ifdef形式
#ifdef 标识符 (或#if defined标识符)
程序段1
#else
程序段2
#endif
如果标识符已被#define定义过,则对程序段1进行编译;否则对程序段2进行编译。如果没有程序段2(它为空),#else可以没有,即可以写为:
#ifdef 标识符 (或#if defined标识符)
程序段
#endif
2.#ifndef形式
#ifndef 标识符(或#if !(defined 标识符))
程序段1
#else
程序段2
#endif
如果标识符未被#define命令定义过,则对程序段1进行编译,否则对程序段2进行编译。这与#ifdef形式的功能正相反。
3.#if形式
#if 常量表达式
程序段1
#else
程序段2
#endif
如果常量表达式的值为真(非0),则对程序段1 进行编译,否则对程序段2进行编译。
到此C语言中常用到的预处理功能我们就介绍完毕了。大家有什么不明白的或者有什么意见可以关注下面的微信公众号,我们一起在线讨论。下面是针对这篇小编为留的练习题,请回答如下关于文件包含和条件编译的问题答案会在下一篇公布:
为了避免从当前目录下查找头文件我们文件包含时应该用尖括号还是双引号?
实现条件编译中形式一的一个例子
大家如果对编程感兴趣,想了解更多的编程知识,解决编程问题,以及入门指导,我们这里有java高手,C++/C高手,windows/Linux高手,android/ios高手,请大家关注微信公众号:程序员互动联盟或者coder_online
- 上一篇: C语言数学库的3种类型
- 下一篇: 手机一联接电脑,电脑就蓝屏
猜你喜欢
- 2025-05-27 C语言基础
- 2025-05-27 微信大更新!新增5个新功能,还有6个新变化
- 2025-05-27 Win10学院:Setup.exe命令行参数详解
- 2025-05-27 手机一联接电脑,电脑就蓝屏
- 2025-05-27 C语言数学库的3种类型
- 2025-05-27 我的编程梦----聊聊Java特性
- 2025-05-27 大话C语言:C语言的前世今生
- 2025-05-27 Windows电脑文件的扩展名(后缀名)有哪些,有什么用?
- 2025-05-27 “快捷方式”不简单
- 2025-05-27 深入理解 C 语言的 hello world
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)