C语言预处理命令之条件编译(#ifdef,#else,#endif,#if等)

合集下载

gcc -e -p 条件编译

gcc -e -p 条件编译

条件编译是指根据预定义的条件来决定编译程序的部分内容是否生效的一种编程技术。

在C语言中,条件编译是通过预处理器指令来实现的。

其中,gcc是C语言的编译器之一,它也支持条件编译的功能。

在使用gcc编译器时,我们可以通过一些选项来控制条件编译的行为。

在本文中,我们将探讨gcc编译器中条件编译的相关内容,包括条件编译的基本语法、条件编译的作用、以及一些相关的注意事项。

1. 条件编译的基本语法条件编译是通过在源代码中插入预处理器指令来实现的。

在C语言中,我们使用“#if”、“#else”、“#elif”和“#endif”等指令来控制条件编译的行为。

例如:```#if defined(DEBUG)printf("Debug mode\n");#elseprintf("Release mode\n");#endif```在上面的例子中,如果在编译时定义了DEBUG宏,那么编译器会编译“printf("Debug mode\n");”这行代码;反之,如果没有定义DEBUG宏,则编译器会编译“printf("Release mode\n");”这行代码。

2. 条件编译的作用条件编译可以根据不同的编译条件来决定是否包含某些代码或者宏定义。

这在一些需要在不同的环境下进行编译的情况下非常有用,例如在调试和发布版本中需要有不同的日志输出等。

条件编译也可以用来解决不同操作系统的差异,以及在不同的评台上进行编译时的一些特定问题。

3. 相关注意事项在使用gcc编译器进行条件编译时,有一些需要注意的地方。

条件编译的使用应尽量避免,因为过多的条件编译会使代码变得难以维护和理解。

条件编译的语法和使用方法应当符合C语言的规范,以避免出现一些意外的错误。

在使用条件编译时,我们还需要避免使用一些与评台相关的宏定义,以免造成代码的不可移植性。

另外,使用条件编译时需要注意控制代码的复杂性,以免造成代码的混乱和难以维护。

条件编译命令

条件编译命令
[#else 程序段2 ]
#endif
如果标识符未被#define命令定义过则 对程序段1进行编译,否则对程序段2进 行编译。
3.第三种形式: #if 表达式 程序段1 #else 程序段2 #endif
#if命令后跟常量整数表达式,如表达 式的值为真(非0),则对程序段1 进行 编译,否则对程序段2进行编译。
#else
s=PI*r*r;printf("The Area=%lf\n",s);
#endif
}
第2行宏定义中,定义C为1,因此在条件编译时,
常量表达式的值为真,故计算并输出圆面积。
5
C语言程序设计
C语言程序设计
条件编译命令
条件编译能够让程序员控制预处理命令的执行和程序代码的 编译。也就是说,条件编译预处理命令告诉编译器:根据编译 时的条件接受或者忽略代码块。
条件编译有三种形式:
1.第一种形式: #ifdef 标识符
程序段1 [#else
程序段2 ] #endif
#ifdef命令说明:如果预处理器已 经定义了标识符,则编译代码直到 下一个#else或者#endif命令出现 为止。如果有#else命令,那么, 在未定义标识符时会编译#else和 #endif之间的代码。
4
条件编译命令
例7-11 使用条件编译的第三种形式改写例7-10。
#dee C 1
void main()
{
double r,c,s;
printf("Enter The Radius\n");scanf("%lf",&r);
#if C
c=2*PI*r;printf("The perimeter=%lf\n",c);

c51 条件编译

c51 条件编译

c51 条件编译C51的条件编译是预处理指令的一种,它允许在编译时根据某些条件选择性地编译代码。

C51条件编译主要有三种形式:1.#ifdef 标识符如果指定的标识符已被#define命令定义,则编译随后的程序段,直到遇到#else或#endif。

如果没有定义该标识符,且存在#else部分,则编译#else后的程序段。

c#ifdef DEBUG// 这部分代码仅在DEBUG被定义时编译#else// 这部分代码仅在DEBUG未被定义时编译#endif2.#ifndef 标识符这与#ifdef相反。

如果指定的标识符没有被#define命令定义,则编译随后的程序段。

如果标识符已被定义,且存在#else部分,则编译#else后的程序段。

c#ifndef RELEASE// 这部分代码仅在RELEASE未被定义时编译#else// 这部分代码仅在RELEASE被定义时编译#endif3.#if 常量表达式如果常量表达式为“真”(非零),则编译随后的程序段。

否则,如果存在#else部分,则编译#else后的程序段。

c#if VERSION > 2// 这部分代码仅在VERSION大于2时编译#else// 这部分代码在其他情况下编译#endif条件编译在多种情况下都很有用,例如:•调试和发布版本:通过定义不同的标识符(如DEBUG和RELEASE),可以在调试和发布版本之间切换。

•多平台支持:可以使用条件编译为不同的平台或硬件配置编写特定的代码。

•功能切换:可以通过条件编译启用或禁用某些功能。

请注意,在使用条件编译时要小心,确保代码的逻辑清晰,并避免创建难以理解和维护的复杂条件结构。

c语言预处理命令之条件编译(ifdefelseendifif等)

c语言预处理命令之条件编译(ifdefelseendifif等)

C语言预处理命令之条件编译(#ifdef,#else,#endif,#if等)预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。

可见预处理过程先于编译器对源代码进行处理。

在C语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码。

要完成这些工作,就需要使用预处理程序。

尽管在目前绝大多数编译器都包含了预处理程序,但通常认为它们是独立于编译器的。

预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行响应的转换。

预处理过程还会删除程序中的注释和多余的空白字符。

预处理指令是以#号开头的代码行。

#号必须是该行除了任何空白字符外的第一个字符。

#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。

整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。

下面是部分预处理指令:指令用途#空指令,无任何效果#include包含一个源代码文件#define定义宏#undef取消已定义的宏#if如果给定条件为真,则编译下面代码#ifdef如果宏已经定义,则编译下面代码#ifndef如果宏没有定义,则编译下面代码#elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码#endif结束一个#if……#else条件编译块#error停止编译并显示错误信息一、文件包含#include预处理指令的作用是在指令处展开被包含的文件。

包含可以是多重的,也就是说一个被包含的文件中还可以包含其他文件。

标准C编译器至少支持八重嵌套包含。

预处理过程不检查在转换单元中是否已经包含了某个文件并阻止对它的多次包含。

这样就可以在多次包含同一个头文件时,通过给定编译时的条件来达到不同的效果。

例如:#defineAAA#include"t.c"#undefAAA#include"t.c"为了避免那些只能包含一次的头文件被多次包含,可以在头文件中用编译时条件来进行控制。

什么是条件编译

什么是条件编译

C语言的条件编译#if, #elif, #else, #endif、#ifdef, #ifnde有些程序在调试、兼容性、平台移植等情况下可能想要通过简单地设置一些参数就生成一个不同的软件,这当然可以通过变量设置,把所有可能用到的代码都写进去,在初始化时配置,但在不同的情况下可能只用到一部分代码,就没必要把所有的代码都写进去,就可以用条件编译,通过预编译指令设置编译条件,在不同的需要时编译不同的代码。

(一)条件编译方法条件编译是通过预编译指令来实现的,主要方法有:1、#if,#elif,#else,#endif#if 条件 1代码段 1#elif 条件 2代码段 2...#elif 条件n代码段n#else代码段 n+1#endif即可以设置不同的条件,在编译时编译不同的代码,预编译指令中的表达式与C 语言本身的表达式基本一至如逻辑运算、算术运算、位运算等均可以在预编译指令中使用。

之所以能够实现条件编译是因为预编译指令是在编译之前进行处理的,通过预编译进行宏替换、条件选择代码段,然后生成最后的待编译代码,最后进行编译。

#if的一般含义是,如果#if后面的常量表达式为true,则编译它所控制的代码,如条件1成立时就代码段1,条件1不成立再看条件2是否成立,如果条件2成立则编译代码段2,否则再依次类推判断其它条件,如果条件1-N都不成力则会编译最后的代码段n+1.2、#ifdef,#else,#endif或#ifndef,#else,#endif条件编译的另一种方法是用#ifdef与#ifndef命令,它们分别表示“如果有定义”及“如果无定义”。

有定义是指在编译此段代码时是否有某个宏通过#define 指令定义的宏,#ifndef 指令指找不到通过#define定义的某宏,该宏可以是在当前文件此条指令的关面定义的,也可以是在其它文件中,但在此指令之前包含到该文件中的。

#ifdef的一般形式是:#ifdef macro_name代码段 1#else代码段 2#endif或#ifdef的一般形式是:#ifndef macro_name代码段 2#else代码段 1#endif这两段代码的效果是完全一样的。

C语言预处理指令宏定义和条件编译的使用技巧

C语言预处理指令宏定义和条件编译的使用技巧

C语言预处理指令宏定义和条件编译的使用技巧C语言是一门广泛应用于系统级编程和嵌入式开发的高级编程语言,其强大的预处理功能使得开发人员能够更加灵活地应对不同的开发需求。

在C语言中,预处理指令宏定义和条件编译是两个非常重要的概念,本文将详细介绍它们的使用技巧。

一、宏定义的基本语法宏定义是一种简单而又实用的编程技巧,通过宏定义可以将一段代码片段替换成指定的内容。

宏定义的基本语法如下:#define 宏名替换内容其中,宏名是用户自定义的标识符,替换内容可以是任何合法的C语言代码。

定义一个宏后,可以通过宏名来使用宏。

下面是一个简单的宏定义示例:#define PI 3.1415926在使用宏时,编译器会自动将PI替换成3.1415926。

宏定义可以用于定义常量、函数和复杂的代码片段,为编程提供了很大的灵活性。

二、宏定义的高级技巧除了基本的宏定义,还可以利用一些高级技巧来提高宏的灵活性和可读性。

1. 参数化宏定义宏定义可以接受参数,通过在宏定义中使用参数,可以实现更加通用的代码替换。

参数化宏定义的语法如下:#define 宏名(参数列表) 替换内容参数列表可以是一个或多个参数,参数之间用逗号分隔。

下面是一个计算圆面积的宏定义示例:#define AREA(r) (PI * (r) * (r))在使用这个宏时,只需要提供半径r的值即可计算出圆的面积。

2. 类型安全宏定义为了增强代码的健壮性和可读性,在宏定义中可以使用类型安全的技巧。

例如,可以使用do-while(0)结构来确保宏定义的语句块能够像普通代码一样正常使用:#define MAX(a, b) \do { \typeof(a) _a = (a); \typeof(b) _b = (b); \_a > _b ? _a : _b; \} while(0)在使用这个宏时,可以正常使用if语句或者赋值语句,而不会出现引入的副作用。

三、条件编译的基本用法条件编译是一种有条件地编译源代码的技术,通过在代码中使用条件编译指令,可以根据不同的条件来选择性地编译特定的代码片段。

c语言的预处理指令分3种  1宏定义  2条件编译  3文件包含

c语言的预处理指令分3种  1宏定义  2条件编译  3文件包含

c语⾔的预处理指令分3种 1宏定义 2条件编译 3⽂件包含宏简介1.C语⾔在对源程序进⾏编译之前,会先对⼀些特殊的预处理指令作解释(⽐如之前使⽤的#include⽂件包含指令),产⽣⼀个新的源程序(这个过程称为编译预处理),之后再进⾏通常的编译所有的预处理指令都是以#开头,并且结尾不⽤分号2.预处理指令分3种 1> 宏定义 2> 条件编译 3> ⽂件包含3.预处理指令在代码翻译成0和1之前执⾏4.预处理的位置是随便写的5.预处理指令的作⽤域:从编写指令的那⼀⾏开始,⼀直到⽂件结尾,可以⽤#undef取消宏定义的作⽤6.宏名⼀般⽤⼤写或者以k开头,变量名⼀般⽤⼩写 宏定义可以分为2种:不带参数的宏定义和带参数的宏定义。

⼀、不带参数的宏定义1.⼀般形式#define 宏名字符串⽐如#define ABC 10右边的字符串也可以省略,⽐如#define ABC2.作⽤它的作⽤是在编译预处理时,将源程序中所有"宏名"替换成右边的"字符串",常⽤来定义常量.3.使⽤习惯与注意1> 宏名⼀般⽤⼤写字母,以便与变量名区别开来,但⽤⼩写也没有语法错误2> 对程序中⽤双引号扩起来的字符串内的字符,不进⾏宏的替换操作。

3> 在编译预处理⽤字符串替换宏名时,不作语法检查,只是简单的字符串替换。

只有在编译的时候才对已经展开宏名的源程序进⾏语法检查4> 宏名的有效范围是从定义位置到⽂件结束。

如果需要终⽌宏定义的作⽤域,可以⽤#undef命令5> 定义⼀个宏时可以引⽤已经定义的宏名#define R 3.0#define PI 3.14#define L 2*PI*R#define S PI*R*R举例1 #include <stdio.h>2#define COUNT 434int main()5 {6char *name = "COUNT";78 printf("%s\n", name);910int ages[COUNT] = {1, 2, 67, 89};1112#define kCount 41314for ( int i = 0; i<COUNT; i++) {15 printf("%d\n", ages[i]);16 }1718// 从这⾏开始,COUNT这个宏就失效19#undef COUNT2021//int a = COUNT 写这个报错2223return0;24 }⼆、带参数的宏定义1.⼀般形式#define 宏名(参数列表) 字符串2.作⽤在编译预处理时,将源程序中所有宏名替换成字符串,并且将字符串中的参数⽤宏名右边参数列表中的参数替换3.使⽤注意1> 宏名和参数列表之间不能有空格,否则空格后⾯的所有字符串都作为替换的字符串2> 带参数的宏在展开时,只作简单的字符和参数的替换,不进⾏任何计算操作。

编程选择题40道:C语言预处理器:宏定义与条件编译.Tex

编程选择题40道:C语言预处理器:宏定义与条件编译.Tex

1.在C语言中,#define 用于定义宏,以下哪个是正确的宏定义使用?o A. #define PI 3.14o B. #define MAX(x, y) x > y ? x : yo C. #define HELLO worldo D. #define int long答案: B解析: 选项A定义了一个常量宏,但选项B定义了一个函数样式的宏,用于计算两个数中的最大值,是更复杂的宏定义示例。

2.以下哪个宏定义在编译期会被预处理器替换?o A. #define DEBUG(x) printf("调试信息: %d\n", x)o B. #define LARGE_NUMBER 1000000Lo C. #define IF ifo D. #define FOR for答案: B解析: 长整型字面量定义的宏在编译期会被数值替换,而选项A会替换为一个函数调用,选项C和D定义了新的关键字,不会在编译期被数值替换。

3.在C语言预处理指令中,#if 和 #ifdef 的主要区别是什么?o A. #if 用于处理表达式,而 #ifdef 用于检查宏是否定义。

o B. #ifdef 可以检查宏的值,而 #if 只能检查宏是否定义。

o C. #if 只能用于数字比较,而 #ifdef 可以用于字符串比较。

o D. #ifdef 和 #if 是完全一样的。

答案: A解析: #ifdef 只检查宏是否定义,不考虑宏的值,#if 可以处理表达式,包括宏的值。

4.当使用 #ifndef 和 #define 指令时,以下哪个说法是正确的?o A. 如果宏未定义,那么 #ifndef 后面的代码会被编译。

o B. #ifndef 后必须紧跟 #define。

o C. #ifndef 和 #define 可以在任何地方出现。

o D. #ifndef 检查宏定义的值。

答案: A解析: #ifndef 用于检查宏是否未定义,如果未定义,后面的代码将被编译。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言预处理命令之条件编译(#ifdef,#else,#endif,#if等)预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。

可见预处理过程先于编译器对源代码进行处理。

在C语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码。

要完成这些工作,就需要使用预处理程序。

尽管在目前绝大多数编译器都包含了预处理程序,但通常认为它们是独立于编译器的。

预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行响应的转换。

预处理过程还会删除程序中的注释和多余的空白字符。

预处理指令是以#号开头的代码行。

#号必须是该行除了任何空白字符外的第一个字符。

#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。

整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。

下面是部分预处理指令:指令用途#空指令,无任何效果#include包含一个源代码文件#define定义宏#undef取消已定义的宏#if如果给定条件为真,则编译下面代码#ifdef如果宏已经定义,则编译下面代码#ifndef如果宏没有定义,则编译下面代码#elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码#endif结束一个#if……#else条件编译块#error停止编译并显示错误信息一、文件包含#include预处理指令的作用是在指令处展开被包含的文件。

包含可以是多重的,也就是说一个被包含的文件中还可以包含其他文件。

标准C编译器至少支持八重嵌套包含。

预处理过程不检查在转换单元中是否已经包含了某个文件并阻止对它的多次包含。

这样就可以在多次包含同一个头文件时,通过给定编译时的条件来达到不同的效果。

例如:#defineAAA#include"t.c"#undefAAA#include"t.c"为了避免那些只能包含一次的头文件被多次包含,可以在头文件中用编译时条件来进行控制。

例如:/*my.h*/#ifndefMY_H#defineMY_H……#endif在程序中包含头文件有两种格式:#include<my.h>#include"my.h"第一种方法是用尖括号把头文件括起来。

这种格式告诉预处理程序在编译器自带的或外部库的头文件中搜索被包含的头文件。

第二种方法是用双引号把头文件括起来。

这种格式告诉预处理程序在当前被编译的应用程序的源代码文件中搜索被包含的头文件,如果找不到,再搜索编译器自带的头文件。

采用两种不同包含格式的理由在于,编译器是安装在公共子目录下的,而被编译的应用程序是在它们自己的私有子目录下的。

一个应用程序既包含编译器提供的公共头文件,也包含自定义的私有头文件。

采用两种不同的包含格式使得编译器能够在很多头文件中区别出一组公共的头文件。

二、宏宏定义了一个代表特定内容的标识符。

预处理过程会把源代码中出现的宏标识符替换成宏定义时的值。

宏最常见的用法是定义代表某个值的全局符号。

宏的第二种用法是定义带参数的宏,这样的宏可以象函数一样被调用,但它是在调用语句处展开宏,并用调用时的实际参数来代替定义中的形式参数。

1.#define指令#define预处理指令是用来定义宏的。

该指令最简单的格式是:首先神明一个标识符,然后给出这个标识符代表的代码。

在后面的源代码中,就用这些代码来替代该标识符。

这种宏把程序中要用到的一些全局值提取出来,赋给一些记忆标识符。

#defineMAX_NUM10intarray[MAX_NUM];for(i=0;i<MAX_NUM;i++)/*……*/在这个例子中,对于阅读该程序的人来说,符号MAX_NUM就有特定的含义,它代表的值给出了数组所能容纳的最大元素数目。

程序中可以多次使用这个值。

作为一种约定,习惯上总是全部用大写字母来定义宏,这样易于把程序红的宏标识符和一般变量标识符区别开来。

如果想要改变数组的大小,只需要更改宏定义并重新编译程序即可。

宏表示的值可以是一个常量表达式,其中允许包括前面已经定义的宏标识符。

例如:#defineONE1#defineTWO2#defineTHREE(ONE+TWO)注意上面的宏定义使用了括号。

尽管它们并不是必须的。

但出于谨慎考虑,还是应该加上括号的。

例如:six=THREE*TWO;预处理过程把上面的一行代码转换成:six=(ONE+TWO)*TWO;如果没有那个括号,就转换成six=ONE+TWO*TWO;了。

宏还可以代表一个字符串常量,例如:#defineVERSION"Version1.0Copyright(c)2003"2.带参数的#define指令带参数的宏和函数调用看起来有些相似。

看一个例子:#defineCube(x)(x)*(x)*(x)可以时任何数字表达式甚至函数调用来代替参数x。

这里再次提醒大家注意括号的使用。

宏展开后完全包含在一对括号中,而且参数也包含在括号中,这样就保证了宏和参数的完整性。

看一个用法:intnum=8+2;volume=Cube(num);展开后为(8+2)*(8+2)*(8+2);如果没有那些括号就变为8+2*8+2*8+2了。

下面的用法是不安全的:volume=Cube(num++);如果Cube是一个函数,上面的写法是可以理解的。

但是,因为Cube是一个宏,所以会产生副作用。

这里的擦书不是简单的表达式,它们将产生意想不到的结果。

它们展开后是这样的:volume=(num++)*(num++)*(num++);很显然,结果是10*11*12,而不是10*10*10;那么怎样安全的使用Cube宏呢?必须把可能产生副作用的操作移到宏调用的外面进行:intnum=8+2;volume=Cube(num);num++;3.#运算符出现在宏定义中的#运算符把跟在其后的参数转换成一个字符串。

有时把这种用法的#称为字符串化运算符。

例如:#definePASTE(n)"adhfkj"#nmain(){printf("%s\n",PASTE(15));}宏定义中的#运算符告诉预处理程序,把源代码中任何传递给该宏的参数转换成一个字符串。

所以输出应该是adhfkj15。

4.##运算符##运算符用于把参数连接到一起。

预处理程序把出现在##两侧的参数合并成一个符号。

看下面的例子:#defineNUM(a,b,c)a##b##c#defineSTR(a,b,c)a##b##cmain(){printf("%d\n",NUM(1,2,3));printf("%s\n",STR("aa","bb","cc"));}最后程序的输出为:123aabbcc千万别担心,除非需要或者宏的用法恰好和手头的工作相关,否则很少有程序员会知道##运算符。

绝大多数程序员从来没用过它。

三、条件编译指令条件编译指令将决定那些代码被编译,而哪些是不被编译的。

可以根据表达式的值或者某个特定的宏是否被定义来确定编译条件。

1.#if指令#if指令检测跟在制造另关键字后的常量表达式。

如果表达式为真,则编译后面的代码,知道出现#else、#elif或#endif为止;否则就不编译。

2.#endif指令#endif用于终止#if预处理指令。

#defineDEBUG0main(){#ifDEBUGprintf("Debugging\n");#endifprintf("Running\n");}由于程序定义DEBUG宏代表0,所以#if条件为假,不编译后面的代码直到#endif,所以程序直接输出Running。

如果去掉#define语句,效果是一样的。

3.#ifdef和#ifndef#defineDEBUGmain(){#ifdefDEBUGprintf("yes\n");#endif#ifndefDEBUGprintf("no\n");#endif}#ifdefined等价于#ifdef;#if!defined等价于#ifndef4.#else指令#else指令用于某个#if指令之后,当前面的#if指令的条件不为真时,就编译#else后面的代码。

#endif指令将中指上面的条件块。

#defineDEBUGmain(){#ifdefDEBUGprintf("Debugging\n");#elseprintf("Notdebugging\n");#endifprintf("Running\n");}5.#elif指令#elif预处理指令综合了#else和#if指令的作用。

#defineTWOmain(){#ifdefONEprintf("1\n");#elifdefinedTWOprintf("2\n");#elseprintf("3\n");#endif}程序很好理解,最后输出结果是2。

6.其他一些标准指令#error指令将使编译器显示一条错误信息,然后停止编译。

#line指令可以改变编译器用来指出警告和错误信息的文件号和行号。

#pragma指令没有正式的定义。

编译器可以自定义其用途。

典型的用法是禁止或允许某些烦人的警告信息。

补充:预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作。

说白了,就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译。

这样做的好处是,经过处理后的代码,将会变的很精短。

关于预处理命令中的文件包含(#include),宏定义(#define),书上已经有了详细的说明,在这里就不详述了。

这里主要是对条件编译(#ifdef,#else,#endif,#if等)进行说明。

以下分3种情况:1:情况1:#ifdef _XXXX...程序段1...#else...程序段2...#endif这表明如果标识符_XXXX已被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。

例:#define NUM.......................................#ifdef NUMprintf("之前NUM有过定义啦!:) \n");#elseprintf("之前NUM没有过定义!:( \n");#endif}如果程序开头有#define NUM这行,即NUM有定义,碰到下面#ifdef NUM的时候,当然执行第一个printf。

相关文档
最新文档