在这篇文章中,我们解释了C/C++中不同的预处理器指令以及C++代码示例。预处理器指令是在编译时处理的,是大型代码库中的一种重要的编程技术。
目录:
- 预处理机指令简介
- 文件包容指令
- 宏替代指令
- 条件性编译指令
让我们开始学习预处理程序指令。
预处理器指令的介绍
C语言中的预处理器是一个程序,它分析或处理程序中要使用的源代码文件,然后再交给编译器。
下图表示预处理器的运行情况 预处理器-1
预处理器指令是C语言中带有特殊命令的代码,这些代码不是C语言,而是给预处理器的特殊和具体的指令。
预处理器的语法:
它以'#'开头,不以分号(;)结束
在C语言中,有不同类型的预处理器指令:
- 文件包容指令
- 宏替代指令
- 简单巨集
- 有参数的巨集
- 嵌套宏
- 条件性编译指令
- if指令
- elif指令
- ifdef指令
- ifndef directives
- else指令
- endif指令
- 文件包容指令 =========
"#include "是文件包容预处理器指令。
语法:
#include<filename>
它命令编译器将指定文件的内容包含在指令中所包含的头文件下。
- 巨集替换指令 =========
宏置换是一个用预定义的字符串或值替换标识符的过程。"#define "是C语言中的宏置换指令。
在C语言中,有三种类型的宏。
a) 简单宏
这种类型的宏在C语言程序中替代一个定义的符号的值,每当该符号出现时,宏将用分配给它的值替代该符号。这主要用于程序中定义常量,这些常量在程序中反复出现,但数值没有变化。
例子:
#define PI 3.14
b) 争论式巨集
这个宏被称为有参数的宏,因为它看起来像一个函数。它代表小的代码片段,每次遇到宏的名称时,它的参数都会被替换成程序的实际参数。
例子:
#HALFOF(x)x/2
c) 嵌套宏:
一个宏可以在另一个宏中使用,这被称为宏的嵌套。
例子:
#define CUBE(x)SQR(x)*(x)
- 条件性编译指令 ==========
在C语言中,这种类型的预处理器有条件地抑制了源代码的编译部分。
有六种类型的条件性编译指令
i) if指令
if指令允许有条件的编译,预处理器对#if指令提供的表达式进行评估,以确定后续代码是否应该被包含在编译过程中。
语法:
#if conditional_expression
/* Example using #if directive*/
#include <stdio.h>
#define WINDOWS 1
int main()
{
printf("The Website is a great ");
#if WINDOWS
printf("Windows ");
#endif
printf("resource.\n");
return 0;
}
二)elif指令
当与if,ifdef或,ifndef指令一起使用时,#elif指令提供了一个备用的部分动作,当前面的#if,#ifdef或#ifndef指令的条件评估为假时,它包括#elif语句后面的C源代码,而#elif条件评估为真。
语法:
#elif conditional_expression
/* Example using #elif directive*/
#include <stdio.h>
#define YEARS_OLD 12
int main()
{
#if YEARS_OLD <= 10
printf("The Website is a great resource.\n");
#elif YEARS_OLD > 10
printf("Website is over %d years old.\n", YEARS_OLD);
#endif
return 0;
}
iii) ifdef指令
ifdef指令在编译过程中包括后续的C代码之前,确定所提供的宏是否存在。
语法:
#ifdef macro_definition
/* Example using #ifdef directive*/
#include <stdio.h>
#define YEARS_OLD 10
int main()
{
#ifdef YEARS_OLD
printf("The Website is over %d years old.\n", YEARS_OLD);
#endif
printf("The Website is a great resource.\n");
return 0;
}
iv) ifndef指令
在将后续的C程序代码纳入编译过程之前,ifndef指令确定所提供的宏是否存在。
语法:
#ifndef macro_definition
/* Example using #ifndef directive*/
#include <stdio.h>
#define YEARS_OLD 12
#ifndef YEARS_OLD
#define YEARS_OLD 10
#endif
int main()
{
printf("The Website is over %d years old.\n", YEARS_OLD);
return 0;
}
v) else指令
当与if、ifndef或ifdef指令一起使用时,#else指令提供了另一种操作,当#if、#ifndef或#ifdef指令的条件评估为假时,预处理器将包括#else语句后面的C程序代码。
语法:
#else
/* Example using #else directive */
#include <stdio.h>
#define YEARS_OLD 12
int main()
{
#if YEARS_OLD < 10
printf("The Website is a great resource.\n");
#else
printf("The Website is over %d years old.\n", YEARS_OLD);
#endif
return 0;
}
vi) endif指令
endif指令用于关闭if、ifdef、ifndef、elif、else指令,如果遇到#endif指令时,就完成了对开头指令的预处理。
语法:
#endif
/* Example using #endif directive */
#include <stdio.h>
#define WINDOWS 1
int main()
{
printf("The Website is a great ");
#if WINDOWS
printf("Windows ");
#endif
printf("resource.\n");
return 0;
}
通过OpenGenus的这篇文章,你必须对C/C++的预处理指令有完整的了解。