亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C语言预处理器与宏完全指南:#include、#define 与条件编译

C语言预处理器与宏完全指南

探索C预处理器威力:学习包含头文件、定义常量与函数、用条件指令控制编译流程。

C语言预处理器与宏完全指南:#include、#define 与条件编译

C预处理器在编译器前运行,通过展开宏、包含头文件、评估条件语句转换源码。它是编写灵活、可复用代码的必备工具。

所有预处理指令以 # 开头。例如:

#define PI 3.14

包含头文件:#include

#include 将头文件内容直接插入源文件。常用:

#include <stdio.h>

无 #include <stdio.h>,printf() 和 scanf() 将未定义。也可创建自定义头文件:

#include "my_header.h"

自定义头文件便于归组相关函数声明和常量。

定义常量与表达式:#define

宏在编译前用值替换标记或表达式。示例:

#define c 299792458 /* 光速 */

程序中使用 c 处处展开为 299792458。

示例 1:定义 PI

#include <stdio.h>
#define PI 3.1415
int main() {
    float radius, area;
    printf("输入半径: ");
    scanf("%f", &radius);
    area = PI * radius * radius;
    printf("Area=%.2f", area);
    return 0;
}

函数式宏

宏可接受参数,类似内联函数:

#define circleArea(r) (3.1415 * (r) * (r))

circleArea(5) 展开为 (3.1415 * 5 * 5)。

示例 2:使用函数式宏

#include <stdio.h>
#define PI 3.1415
#define circleArea(r) (PI * (r) * (r))
int main() {
    float radius, area;
    printf("输入半径: ");
    scanf("%f", &radius);
    area = circleArea(radius);
    printf("Area = %.2f", area);
    return 0;
}

条件编译

条件指令让你在编译期包含或排除代码块,类似 if 但预执行评估。

常见用例

关键指令

#ifdef MACRO /* MACRO 定义时的代码 */ #endif
#if EXPRESSION /* 表达式非零时代码 */ #else /* 表达式为零时代码 */ #endif
#if EXPRESSION /* 代码 */ #elif ANOTHER_EXPRESSION /* 备选代码 */ #else /* 兜底代码 */ #endif
#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048 /* 缓冲区足够大 */ #endif

预定义宏

宏值
__DATE__当前编译日期字符串
__FILE__当前文件名字符串
__LINE__宏出现处的行号
__STDC__遵循ANSI C标准则非零
__TIME__当前编译时间字符串

示例 3:显示编译时间

#include <stdio.h>
int main() {
    printf("Current time: %s", __TIME__);
    return 0;
}

输出示例:

Current time: 19:54:39

推荐阅读

C语言

  1. 交流电路中电阻、电感、电容综合总结
  2. C#关键字与标识符:规则、完整列表与最佳实践
  3. C# 类与对象:面向对象编程的基石
  4. 掌握 C# 抽象类与抽象方法:实战指南
  5. 理解 C# 分部类与分部方法
  6. 掌握 C# sealed 类与方法:用法、示例与代码安全性能提升
  7. 掌握 C# 预处理器指令:条件编译、诊断控制与代码组织实战
  8. C 语言关键字与标识符完全指南
  9. C 语言常量与字面量完全指南:类型、用法与最佳实践
  10. C 语言输入输出完全掌握:标准 I/O 与格式化控制
  11. 深入理解 C 预处理器 (CPP):它如何简化编译过程
  12. C++日期时间完全指南:ctime库、tm结构体与格式化输出