C/C++ 预处理器指令
cc++server side programmingprogramming
在 C 或 C++ 中,我们发现以 (#) 符号开头的不同行。这些称为预处理指令。这些行在编译代码之前的预处理阶段进行处理。这里我们将看到三种不同类型的预处理指令。这些是 −
- 条件编译
- 行控制
- 错误指令
有时我们在程序中定义一些宏。使用条件编译指令。我们可以检查宏是否已定义。我们也可以控制它们。因此,如果定义了一个宏,则执行某些任务,否则执行其他类似的任务。
条件编译指令类似于 #ifdef-#elif-#else-#endif。每个 #ifdef 块都必须以 #endif 结束。 #elif 或 #else 是可选的。
示例
#include <iostream> #define MY_MACRO 10 using namespace std; int main() { #ifdef MACRO cout << "MACRO is defined" << endl; #elif MY_MACRO cout << "MY_MACRO is defined, value is: " << MY_MACRO; #endif }
输出
MY_MACRO is defined, value is: 10
通过键入 #line 来使用行控制指令。有时我们会遇到首选行号错误。我们可以使用此指令更新行号。如果我们放置此指令并将当前行更改为 200,那么之后行将从 201 开始移动。
示例
#include <iostream> using namespace std; int main() { cout<< "Current line is: " << __LINE__ << endl; #line 200 cout << "Hello" << endl; cout << "World" << endl; cout<< "Current line is: " << __LINE__ << endl; }
输出
Current line is: 5 Hello World Current line is: 202
error 指令用于在编译前显示错误。假设应该定义一个宏,但如果未定义,我们可以显示错误消息。这可以使用 #error 来完成。
示例
#include <iostream> using namespace std; int main() { #ifdef MY_MACRO cout << "MY_MACRO is defined, value is: " << MY_MACRO; #else #error MY_MACRO should be defined #endif }
输出
#error MY_MACRO should be defined