C语言中的预处理指令是特殊的命令,它们在编译程序的实际编译阶段之前由预处理器(preprocessor)处理。这些指令用于在编译之前修改源代码,例如包含其他文件、定义常量或宏等。以下是C语言中常见的预处理指令:
-  #include: 
 这个指令用于包含其他文件的内容。有两种主要的包含方式:- #include <filename>:从标准库路径中搜索文件。
- #include "filename":首先在当前目录或编译器指定的其他目录中搜索文件,如果找不到,则可能在标准库路径中搜索。
 
例如,#include <stdio.h> 用于包含标准输入输出库的定义。
 2. #define:
 这个指令用于定义常量或宏。常量是一个具有固定值的标识符,而宏则是一个可以展开为代码片段的标识符。
复制代码
| * 定义常量:`#define PI 3.14159`  | |
| * 定义宏(简单的宏):`#define SQUARE(x) ((x) * (x))`  | |
| 注意:在定义宏时,使用括号是很重要的,以确保宏在复杂表达式中正确展开。 | 
3. #undef:
 这个指令用于取消之前由 #define 定义的宏或常量。
例如,#undef PI 会取消之前定义的 PI 常量。
 4. #if, #elif, #else, #endif:
 这些指令用于条件编译。它们允许根据条件(通常是预定义的常量或宏)决定是否编译代码的某个部分。
例如:
c复制代码
| #define DEBUG 1  | |
| #if DEBUG  | |
| printf("Debugging is on\n");  | |
| #else  | |
| printf("Debugging is off\n");  | |
| #endif | 
- #ifdef, #ifndef:
 这些指令检查是否已定义某个宏或常量。
例如:
c复制代码
| #ifdef DEBUG  | |
| // Debugging-related code  | |
| #endif | 
- #line:
 这个指令允许改变预处理器在后续警告和错误消息中生成的行号和文件名。这通常用于在代码生成工具(如词法分析器和语法分析器)中。
- #error 和 #warning:
 这些指令分别用于生成编译时的错误和警告消息。
例如:#error "Unsupported platform" 会导致编译器生成一个错误消息,并显示 "Unsupported platform"。
 8. #pragma:
 这是一个通用指令,用于为编译器提供特殊的指示或指令。它的具体效果取决于编译器和使用的特定选项。例如,一些编译器使用 #pragma once 来防止头文件被多次包含。
这些预处理指令为C语言提供了很大的灵活性,允许程序员根据需要进行条件编译、定义常量、包含库文件等。