摘要:条件编译指令允许我们根据条件来编译源代码中不同的部分。
一:常见的条件编译指令:#if、#else、#elif、#endif、#ifdef和#ifndef
常见格式如下:#if 常量表达式
代码语句;
#elseif 常量表达式
代码语句
#endif
#include <stdio.h>
#include <stdlib.h>
#define M(a,s) (a+4)*((b/4)
#define N 3
int main()
{ int a =20;
#if((N)>10)
printf("N>2被打印第一次\n");
printf("N>2被打印第二次\n");
#elif N>2
printf("N>2被打印第一次\n");
printf("N>2被打印第二次\n");
#endif
printf("退出条件编译打印第一次!\n");
if (a=20)
printf("a=20被打印第一次\n");
return 0;
}
直接在编译器中更明显,如果不符合编译条件,那么编译器直接将,其后面的代码置灰色。表明将不会编译这段代码!
有几点比较需要注意:
1:我在写代码时发现:如果条件编译指令 和{并行的话,编译器将会报错。暂时不知道原因,希望有大佬指点一下。
2:#if 后可以时任意形式的常量表达式,需要根据需要看是否需要加上(),非强制要求,但是为了防止出错,加上()也是个非常好的习惯。与代码段的if后必须加上()要区别起来。
3:每一个#if都必须有一个#endif与之对应。而elif则不需要。
4:条件编译,如#if 常量表达式
语句一;
语句二;
语句三;
#endif、#elif ,等。。。#if后的所有语句都被视为一个整体,直到遇到 #endif、#elif
才结束。
#if (常量表达式)
{
语句一;
语句二;
语句三;
}
加上{}也是一个好习惯。
二:#ifndef #define #endif的两种用法
1:定义头文件
#ifndef __reg51H__
#define __reg51H__
{
typedef int u16;
void fun1(int a);
int b =10;
}
这里需要注意的是:
(1)__reg51H__必须是合法的标识符,如果写成52_h,因为是字母开头就不是合法的标识符,编译阶段就会出错。
(2)实际写代码中发现,一个头文件,或者.c文件中只能使用上面的格式一次,重复在同一代码中再次定义一个头文件,就会出错。
(是代码写的问题,这一段是错误的描述)
如下图
2:简单用法,
#ifndef MAX
#define MAX 100