#if 是条件编译,使用方式和if else的使用非常相似, 一般使用格式如下:
#if 整形常量表达式1
程序段1
#elif 整形常量表达式2
程序段2
#else
程序段3
#endif
执行起来就是,如果整形常量表达式为真,则执行程序段1,否则继续往后判断依次类推(注意是整形常量表达式),最后#endif是#if的结束标志
#include "stdio.h"
#define MAX 10
int main()
{
printf("MAX = %d\n", MAX);
#if MAX == 10
printf("MAX已被定义\n");
#else
printf("MAX未被定义\n");
#undef MAX
#define MAX 20
#endif
printf("MAX = %d\n", MAX)
return 0;
}
#if命令要求判断条件为整型常量表达式,也就是说表达式中不能包含变量,而且结果必须是整数;而if后面的表达式没有限制,只要符合语法就行,这是#if和if的一个重要区别
#define N 100
编译器在预处理程序的时候,会将程序中所有N替换成100.换言之,不同于const常量,define其实本质是上对文本内容的替换。
#define和constant的区别:
#define N 1+2
float a = N/2.0;
常规思维可能会觉得a的结果为1.5(3/2)
但实际的结果为1+2/2.0 = 1+1.0=2.0
如果想要结果为1.5则需要这样子:
#define N (1+2)
float a = N/2.0;
#include
#define PI 3.14
#define S(r) PI*r*r
int main(void)
{
printf("area = %f", S(1+2));
rerturn 0;
}
打印的结果为7.14
因为 3.14 * 1+2 * 1+2
= 3.14+2+2
= 7.14
注意#define 就是一个简单而直接的文本替换,将后面的内容直接替换进去就行.
但并不是所有情况下#define所定义的字符串都会被替换,有一种特殊情况:被替换的字符串在""内
#include
#define MAX 10
int main()
{
printf("MAX");
}
这里的MAX就不会被替换
宏定义是#define
,如果想要取消宏定义,可以使用#undef
#ifdef的作用是判断某个宏是否定义,如果已经定义则执行后面的代码,使用格式如下:
#ifdef 宏名
程序段1
#else
程序段2
#endif
它的意思是,如果该宏已被定义过,则对程序段1进行编译,否则对程序段2进行编译(这个和上面的#if一样最后都需要#endif),上述格式也可以不用#else,这一点上和if else相同
例如:
#include
#define MAX 10
int main()
{
#ifdef MAX
printf("MAX已被定义\n");
#else
printf("MAX未被定义\n");
#undef MAX
#define MAX 20
#endif
printf("MAX = %d\n", MAX);
return 0;
}
#ifndef和#ifdef的使用完全相反,当宏未被定义才会执行后面的程序段.
不管是#if,#ifdef还是#ifndef,最后一定要是#endif结尾