C语言入门小册子
Completion requirements
C语言中的预处理指令
#include 指令
#include 用于在C源代码中包含其他文件的内容:
#include <stdio.h>
- 使用尖括号
< >指定标准头文件,例如stdio.h,告诉预处理器从编译器的标准目录查找文件。 - 使用双引号
" "指定非标准目录中的文件,例如:
#include "\home\mydefs.h"
注意:
包含文件可以嵌套,即一个包含文件可以调用其他包含文件。
#define 指令
#define 用于定义常量或符号,供简单的文本替换。例如:
#define PI 3.141592654
a = PI * b;
在预处理阶段,PI 将被替换为 3.141592654,C编译器实际上从未见到符号 PI。
函数式宏:#define 还可用于定义类似函数的宏,支持参数替换。例如:
#define ABS(value) ( (value) >= 0 ? (value) : -(value) )
printf("Absolute value of x = %d\n", ABS(x));
但要小心,这些宏并不像真正的函数。例如,当参数是 x++ 时:
val = ABS(x++);
宏展开为:
val = ( (x++) >= 0 ? (x++) : -(x++) );
这会导致 x 被递增两次。
取消定义:
使用 #undef 可以取消定义已定义的常量:
#undef PI
条件编译
C预处理器支持条件编译,允许根据条件选择性地编译代码块。以下是常用指令:
#if: 测试条件是否为真。#else: 在条件为假时执行的代码块。#elif: 相当于else if,测试另一个条件。#endif: 结束条件编译块。
示例:
#if WIN == 1
#include "WIN.H"
#elif MAC == 1
#include "MAC.H"
#else
#include "LINUX.H"
#endif
defined 操作符:
可以测试某常量是否已定义:
#if defined(DEBUG)
printf("Debug mode!\n");
#endif
测试未定义的常量:
#if !defined(DEBUG)
printf("Not debug mode!\n");
#endif
嵌套条件编译:
条件编译指令可以嵌套使用,以满足更复杂的逻辑需求。
#pragma 指令
#pragma 是一个通用指令,用于实现机器特定的非标准命令。由于其非标准特性,不同编译器对 #pragma 的支持各不相同。
总结
#include指令: 用于包含头文件,支持标准和非标准文件路径。#define和#undef指令: 用于定义常量和宏,支持简单的文本替换及函数式宏。- 条件编译指令: 使用
#if、#else、#elif和#endif控制代码编译,支持复杂逻辑和defined测试。 #pragma指令: 实现非标准功能,不同编译器支持不一。
这些预处理指令为C语言提供了极大的灵活性,使代码更具可维护性和适应性。
Last modified: Monday, 27 January 2025, 11:17 PM