C / C ++预处理程序指令

在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使用line control指令。有时我们会在首选行号上出现一些错误。我们可以使用此伪指令更新行号。如果我们将其放置并将当前行更改为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