C语言笔记之条件编译
来源:互联网 发布:树莓派可以装windows吗 编辑:程序博客网 时间:2024/04/30 00:12
上篇文章中主要介绍了#define的用法,本文介绍几个它的“近亲”。
1、#undef
C语言不允许对同一个宏名称重复定义,比如下面的写法编译时会报错:
#define R 3 #define R 4那么#undef就是用来取消对一个宏名的定义的,取消之后我们才可以重新使用它。
#define R 3#undef R#define R 4即使开始没有定义 R ,取消 R的定义也是合法的。如果想使用一个特定名字,但又不能确定前面是否已经使用了该名字,为安全起见,就可以取消该名字的定义。
2、#ifdef #ifndef #else #endif
先摆代码:
#ifndef HEADER_FILENAME#define HEADER_FILENAME#endif
看名字就能猜到这是啥意思,#ifdef 是指如果某个宏名被定义了,那么执行该命令和#endif或#else之间的代码;而#ifndef恰好相反,如果某个宏名没被定义,那么执行它和#endif或#else之间的代码。这些中间的代码既可以是预处理命令,还可以是普通代码。如:
#if MACHINE == 68000int x;#elselong x;#endif
#ifdef #else 格式非常类似于C中 的if else 。主要差异为预处理器不能识别标记代码块的花括号 {} ,因此使用#else (如果需要)和#endif (必须存在)来标记指令块。这些条件结构可以嵌套。
一般地,当某文件包含几个头文件,而且每个头文件都可能定义了相同的宏肘,使用#ifndef可以防止对该宏重复定义。此时,第一个头文件中的定义变成有效定义,而其他头文件中的定义则被忽略。为什么会多次包含同一文件呢?最常见的原因是许多包含文件自身包含了其他文件,因此可能显式地包含其他文件己经包含的文件。为什么这会成为问题呢?因为头文件中的有些语句在-个文件中只能出现一次(如结构类型的声明)。标准C头文件使用#ifndef技术来避免多次包含。
3、#if 和#elif 指令
它们更接近常规的 C中的 if和else,后跟常量整数表达式。如果表达式为非零值,则表达式为真。在该表达式中可以使用 C的关系运算符和逻辑运算符。
许多新的实现提供另一种方法来判断-个名字是否已经定义。不需使用:
#ifdef VAX
而是采用下面的形式:
#if defined (VAX)
这里, defined 是一个预处理器运算符,如 果defined 的 参数已用#define 定义过 , 那么defined 返回1 ,否则返回 0。这种新方法的优点在于它可以和#elif一起使用。
#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
以后补充,用的太少了。
- C语言笔记之条件编译
- c语言学习笔记之条件编译
- C语言宏定义之条件编译
- C语言预处理命令之条件编译
- C语言预处理命令之条件编译
- C语言总结之条件编译
- 单片机基础c语言之条件编译
- C语言预处理之条件编译。
- 单片机基础c语言之条件编译
- C语言条件编译
- c语言条件编译
- C语言条件编译
- C语言条件编译
- c语言 条件编译
- C语言条件编译
- C语言 条件编译
- C语言条件编译
- C语言条件编译
- Wellner 1993快速自适应的图像二值化方法的提高 (Derek Bradley and Gerhard Roth 2007)
- 【日常小记】linux中强大且常用命令:find、grep
- jqueryui实现百度推荐搜索功能
- OpenCV OTSU大津法
- Objective-C 学习四 Protocal 与 Category
- C语言笔记之条件编译
- @property的用法
- ADT(二叉查找树)和AVL(平衡二叉树)总结
- SODBASE CEP学习(一):SODBASE CEP简介
- 第8周项目1-实现复数类中的运算符重载(友元函数)
- 设计模式学习-Adapter Pattern
- 第八周项目 一
- Matlab的regionprops详解
- poj~2886