C语言条件编译

学习C语言也快两年了,一直知道有这东西,但是却一直没去认真学习下。其实还是非常简单的。只怪自己太懒。

只有在昨天学习《THINKING IN JAVA》时候才看到,JAVA用异常来代替了C语言的条件编译功能。好坏自己就不敢妄加判断了。

在网上学习了一会,自己归纳如下:(主要是感觉自己写的例子比网上的看起来快多了)

预处理程序提供了条件编译的功能。可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。这对于程序的移植和调试是很有用的。条件编译有三种形式,下面分别介绍。

第一种形式

第一种形式的格式为:

#ifdef  标识符

程序段1

#else

程序段2

#endif

它的功能是,如果标识符已被 #define命令定义过则对程序段1进行编译;否则对程序段2进行编译。如果没有程序段2(它为空),本格式中的#else可以没有,即可以写为:

#ifdef  标识符

程序段

#endif

例子:

<span style="font-size:24px;">#include <stdio.h>
#define num 1
int main()
{
#ifdef num
	printf("已经宏定义");
#else
	printf("没有宏定义");
#endif
	getchar();
	return 0;
}</span>

因为num在第二行已经define所以条件编译只编译已经宏定义那部分。

故输出为已经宏定义。

第二种形式

第二种形式的格式为:

#ifndef 标识符

程序段1

#else

程序段2

#endif

与第一种形式的区别是将“ifdef”改为“ifndef”。它的功能是,如果标识符未被#define命令定义过则对程序段1进行编译,否则对程序段2进行编译。这与第一种形式的功能正相反。

这里就不再重复例子了。

第三种形式

第三种形式的格式为:

#if 常量表达式

程序段1

#else

程序段2

#endif

它的功能是,如常量表达式的值为真(非0),则对程序段1 进行编译,否则对程序段2进行编译。因此可以使程序在不同条件下,完成不同的功能。

注意这里是常量表达式,所以必须是define的而不是int因为这样是变量的。

例子:

<span style="font-size:24px;">#include <stdio.h>
#define num 1 //常量为1 不为0
int main()
{
#if num
	printf("常量表达式不为0");
#else
	printf("常量表达式为0");
#endif
	getchar();
	return 0;
}</span>

显然结果为常量表达式不为0

C语言条件编译

时间: 2024-08-11 07:44:49

C语言条件编译的相关文章

(五)c语言条件编译#ifdef与#if defined

c语言条件编译#ifdef与#if defined defined NAME是用来判断NAME是否被定义了(被用define定义了). #ifdef NAME == #if defined(NAME) #ifndef NAME == #if !defined(NAME) 但是在处理双重和多重判断时,defined的优势就显示出来了 #ifdef NAME1 #ifdef NAME2 ...... #endif #endif 可以写成 #if defined(NAME1) && define

C语言条件编译详解

预处理程序提供了条件编译的功能.可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件.这对于程序的移植和调试是很有用的.条件编译有三种形式,下面分别介绍. 第一种形式 第一种形式的格式为:    #ifdef  标识符        程序段1    #else        程序段2    #endif 它的功能是,如果标识符已被 #define命令定义过则对程序段1进行编译:否则对程序段2进行编译.如果没有程序段2(它为空),本格式中的#else可以没有,即可以写为:    #if

C语言-条件编译使用分析

1.基本概念 条件编译的行为类似于C语言中的if-else- 条件编译是预编译指示命令,用于控制是否编译某段代码 2.实例分析 条件编译初探     22-1.c 1 #include <stdio.h>   2    3 #define C 1   4    5 int main()   6 {   7     const char* s;   8    9     #if( C == 1 )   10         s = "This is first printf...\n&

条件编译及编译预处理阶段分析与总结--笔记

C语言条件编译及编译预处理阶段分析与应用总结 (笔记) 一.C语言由源代码生成的各阶段如下: C源程序->编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件 其中 编译预处理阶段,读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理.或者说是扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器.预处理过程先于编译器对源代码进行处理. 在C 语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件.定义宏.根据条件决定编译

C语言专题

? if else语句,C语言if else用法完全攻略 errno全局变量及使用细则,C语言errno全局变量完全攻略 内存越界的可能情况分析,C语言内存越界详解 内存分配函数及使用注意事项,C语言内存分配函数完全攻略 堆和栈的理解和区别,C语言堆和栈完全攻略 ASCII码一览表,ASCII码对照表 C语言文件操作完全攻略 指针,C语言指针完全攻略_1 指针,C语言指针完全攻略_2 指针,C语言指针完全攻略_3 C语言函数完全攻略_1 C语言函数完全攻略_2 二维数组,C语言二维数组完全攻略

C/C++预处理命令

1.预处理概述和文件包含命令 前面各章中,已经多次使用过#include命令.使用库函数之前,应该用#include引入对应的头文件.这种以#号开头的命令称为预处理命令. C语言源文件要经过编译.链接才能生成可执行程序: 1) 编译(Compile)会将源文件(.c文件)转换为目标文件.对于VC/VS,目标文件后缀为 .obj:对于GCC,目标文件后缀为 .o. 编译是针对单个源文件的,一次编译操作只能编译一个源文件,如果程序中有多个源文件,就需要多次编译操作. 2) 链接(Link)是针对多个

Golang ---json解析

golang官方为我们提供了标准的json解析库–encoding/json,大部分情况下,使用它已经够用了.不过这个解析包有个很大的问题–性能.它不够快,如果我们开发高性能.高并发的网络服务就无法满足,这时就需要高性能的json解析库,目前性能比较高的有json-iterator和easyjson. 现在我们需要引进一个高性能的json解析库,这里以json-iterator为例,但是我们全部换掉又不放心,所以可以先小范围的测试下,这时候我们就需要两个解析库并存,那么这时候我们如何选择我们需要

C语言 预处理三(条件编译--#if)

//#if 条件编译 //一般用于产品各个版本的语言包 #include<stdio.h> #include<stdlib.h> //#都是预处理指令,条件表达式必须在预处理里面 //所以条件表达式必须是宏表达式 //双分支条件编译 //#if 条件表达式 //代码段1 //#else //代码段2 //#endif //#endif结束条件编译 //#if,#else和C语言里的if else功能一样,但是时间开销不一样 //if else会编译所有的代码,源码会较长,编译时间会

c语言中条件编译相关的预编译指令

一. 内容概述 本文主要介绍c语言中条件编译相关的预编译指令,包括#define.#undef.#ifdef.#ifndef.#if.#elif.#else.#endif.defined. 二.条件编译 条件编译是根据实际定义宏(某类条件)进行代码静态编译的手段.可根据表达式的值或某个特定宏是否被定义来确定编译条件. 最常见的条件编译是防止重复包含头文件的宏,形式跟下面代码类似: 1 #ifndef ABCD_H 2 #define ABCD_H 3 4 // ... some declarat