预处理指令
是什么
编译前对源代码进行处理的指令
#define:用于定义宏变量。
#include:用于将指定的头文件包含到当前文件中。
#ifdef / #ifndef:用于条件编译,根据某个宏是否已经被定义来决定编译哪一段代码。
#if / #elif / #else:用于条件编译,根据某个表达式的真假来决定编译哪一段代码。
#pragma:用于控制编译器或预处理器的行为,比如关闭某些警告信息、优化代码等。
#error:用于输出错误信息并终止编译。
#line:用于改变当前的行号和文件名。
#undef:用于取消已定义的宏。
为什么
代码复用 平台无关 提高编译速度
怎么用
#define
宏定义 不用写 =
, 文本替换机制, 预处理命令, 不用加 ;
#define PI 3.1415926
#define MAX(a, b) ((a) > (b) ? (a) : (b))
cout<<PI<<endl;
cout<<good_max(3,4)<<endl;
#define good_max(a,b)(a>b?a:b) // 返回较大值 我的理解: 传入参数, "隐含"一个等号
#if / #elif / #else
//第一种写法, 似乎更加灵活
#if defined(DEBUG) && DEBUG == 1
cout << "Debugging mode is enabled." << endl;
#endif
//第二种写法
#ifdef _WIN32
#include <direct.h> //windows
#elif __linux__
#include <unistd.h> //linux
#endif
#ifdef / #ifndef
避免变量/函数等重定义
#ifndef HH
#define HH
//头文件内容//
#endif
ps: #pragma once 明显更好用. 在特定的编译环境中,还是应该使用经典的 #ifndef 来确保代码的可移植性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!