本文主要是介绍c语言#if,#ifndef,#define,#ifdef,#endif等预处理命令介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
#if介绍
#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 == 10printf("MAX已被定义\n");
#elseprintf("MAX未被定义\n");#undef MAX#define MAX 20
#endifprintf("MAX = %d\n", MAX)return 0;
}
运行结果为:
#if命令要求判断条件为整型常量表达式,也就是说表达式中不能包含变量,而且结果必须是整数;而if后面的表达式没有限制,只要符合语法就行,这是#if和if的一个重要区别
#define介绍
最常见的用法
#define N 100
编译器在预处理程序的时候,会将程序中所有N替换成100.换言之,不同于const常量,define其实本质是上对文本内容的替换。
#define和constant的区别:
- define是宏定义,程序在预处理阶段将用define定义的内容进行了替换 。因此在程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存。而const定义的常量,在程序运行时,存在常量表中,且系统为它分配内存。
- define定义的常量,预处理时只是直接进行了替换,因此在编译时不能进行数据类型检验。而const定义的常量,在编译时进行严格的类型检验,可以避免出错。
- define定义表达式时要注意“边缘效应”。
#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<stdio.h>
#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 <stdio.h>#define MAX 10int main()
{printf("MAX");
}
这里的MAX就不会被替换
取消定义
宏定义是#define
,如果想要取消宏定义,可以使用#undef
#ifdef介绍
#ifdef的作用是判断某个宏是否定义,如果已经定义则执行后面的代码,使用格式如下:
#ifdef 宏名
程序段1
#else
程序段2
#endif
它的意思是,如果该宏已被定义过,则对程序段1进行编译,否则对程序段2进行编译(这个和上面的#if一样最后都需要#endif),上述格式也可以不用#else,这一点上和if else相同
例如:
#include <stdio.h>
#define MAX 10
int main()
{
#ifdef MAXprintf("MAX已被定义\n");
#elseprintf("MAX未被定义\n");#undef MAX#define MAX 20
#endifprintf("MAX = %d\n", MAX);return 0;
}
#ifndef和#ifdef的使用完全相反,当宏未被定义才会执行后面的程序段.
不管是#if,#ifdef还是#ifndef,最后一定要是#endif结尾
这篇关于c语言#if,#ifndef,#define,#ifdef,#endif等预处理命令介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!