C++中常用的预处理指令

C++中常用的预处理指令:

1. #include

用途:将指定的头文件内容包含到当前源文件中。

示例:

#include <iostream>
// 用于包含标准输入输出流的头文件,以便使用std::cout、std::cin等功能。
#include "myheader.h"
// 用于包含自定义的头文件。编译器会首先在当前源文件所在目录查找自定义头文件。

2. #define

用途:定义常量、宏等。

常量定义示例:

#define PI 3.14159
// 定义了一个名为PI的常量,在预处理阶段,代码中所有出现PI的地方都会被替换为3.14159。

宏定义示例:

#define MAX(a,b) ((a)>(b)?(a):(b))
// 定义了一个宏MAX,用于返回两个数中的较大值。

在预处理时,例如int m = MAX(3, 5);会被替换为int m = ((3)>(5)?(3):(5));。不过要注意宏可能存在一些副作用,使用时需谨慎。

3. #if、#else、#elif、#endif

用途:用于条件编译。根据预定义的条件决定哪些代码被编译。

示例:

#define DEBUG 1
#if DEBUG
std::cout << "This is debug mode." << std::endl;
#else
std::cout << "This is normal mode." << std::endl;
#endif

这里如果DEBUG被定义为1(非零值),则输出“This is debug mode.”;否则输出“This is normal mode.”。#elif相当于else if,可用于添加更多条件分支。

4. #ifdef、#ifndef、#endif

用途:

#ifdef:判断某个标识符是否已经被定义,如果已定义则编译后续代码。

#ifndef:判断某个标识符是否未被定义,如果未定义则编译后续代码。常与#endif配合用于头文件保护。

示例:

#ifndef MYHEADER_H
#define MYHEADER_H
// 这里是头文件内容,如函数声明、类定义等
#endif

这是一种常见的防止头文件被多次包含的方式。

5. #pragma

用途:向编译器发出特定的指令。不同编译器对#pragma的支持有所不同。

示例:

在一些编译器中,#pragma once可用于确保头文件只被包含一次,功能类似于上述的#ifndef - #define - #endif头文件保护,但更为简洁。不过并非所有编译器都支持#pragma once。例如:

#pragma once
// 头文件内容

C++编程语言基础

C++中常用的预处理指令