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