C语言笔记之条件编译

上篇文章中主要介绍了#define的用法,本文介绍几个它的“近亲”。

1、#undef

C语言不允许对同1个宏名称重复定义,比以下面的写法编译时会报错:

#define R 3
#define R 4

那末#undef就是用来取消对1个宏名的定义的,取消以后我们才可以重新使用它。

#define R 3
#undef R
#define R 4

即便开始没有定义 R ,取消 R的定义也是合法的。如果想使用1个特定名字,但又不能肯定前面是不是已使用了该名字,为安全起见,就能够取消该名字的定义。


2、#ifdef #ifndef #else #endif

先摆代码:

#ifndef HEADER_FILENAME
#define HEADER_FILENAME
#endif

看名字就可以猜到这是啥意思,#ifdef 是指如果某个宏名被定义了,那末履行该命令和#endif或#else之间的代码;而#ifndef恰好相反,如果某个宏名没被定义,那末履行它和#endif或#else之间的代码。这些中间的代码既可以是预处理命令,还可以是普通代码。如:

#if MACHINE == 68000
int x;
#else
long x;
#endif

#ifdef #else 格式非常类似于C中 的if else 。主要差异为预处理器不能辨认标记代码块的花括号 {} ,因此使用#else (如果需要)和#endif (必须存在)来标记指令块。这些条件结构可以嵌套。

1般地,当某文件包括几个头文件,而且每一个头文件都可能定义了相同的宏肘,使用#ifndef可以避免对该宏重复定义。此时,第1个头文件中的定义变成有效定义,而其他头文件中的定义则被疏忽。为何会屡次包括同1文件呢?最多见的缘由是许多包括文件本身包括了其他文件,因此可能显式地包括其他文件己经包括的文件。为何这会成为问题呢?由于头文件中的有些语句在-个文件中只能出现1次(如结构类型的声明)。标准C头文件使用#ifndef技术来避免屡次包括。


3、#if 和#elif 指令
它们更接近常规的 C中的 if和else,后跟常量整数表达式。如果表达式为非零值,则表达式为真。在该表达式中可使用 C的关系运算符和逻辑运算符。

许多新的实现提供另外一种方法来判断-个名字是不是已定义。不需使用:
#ifdef VAX
而是采取下面的情势:
#if defined (VAX)
这里, defined 是1个预处理器运算符,如 果defined 的 参数已用#define 定义过 , 那末defined 返回1 ,否则返回 0。这类新方法的优点在于它可以和#elif1起使用。

#if defined (lBMPC)
<span style="white-space:pre"> </span>#include "ibmpc.h'
#elif defined (VAX)
<span style="white-space:pre"> </span>#include "vax.h'
#elif defined (MAC)
<span style="white-space:pre"> </span>#include "mac.h"
#else
<span style="white-space:pre"> </span>#include 'general.h'
#endif

4、#error  #line #progma
以后补充,用的太少了。

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » C语言笔记之条件编译

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡