16

据我了解,#define blah 8是一个宏。而 ,#是预处理器指令。

我们可以说#include、#if、#ifdef 等吗?也是宏,还是它们被称为别的东西?还是宏只是用于#define 语句的术语?

如果我错了,请纠正我。

4

4 回答 4

36

以 开头的行#预处理指令。它们是告诉预处理器做某事的指令。

#include, #if, #ifdef, #ifndef, #else, #elif, #endif, #define, #undef, #line, #error, 和#pragma都是预处理指令。(包含 only 的行#也是预处理指令,但没有效果。)

#define blah 8是预处理指令,它不是宏。 blah是一个宏。该#define预处理指令将宏定义blah为由 token 替换的类对象宏8

于 2012-08-14T18:10:05.683 回答
4

#include, #if, 等是预处理器的特性。

#define blah 8

是一个预处理器指令,并声明了一个名为blah的新宏。

  • 宏是#define语句的结果。
  • 预处理器是 C 的一个特性。
于 2012-08-14T18:12:10.013 回答
4

Preporcessor:进行预处理(文件包含、宏扩展、条件编译)的程序。

宏:由#define预处理器指令定义的词,其计算结果为其他表达式。

预处理器指令:一个特殊的#-keyword,被预处理器识别。

于 2012-08-14T18:12:58.407 回答
2

预处理器在将源文件交给编译器之前对其进行修改。

将预处理器视为在编译器之前运行的程序。

预处理器指令类似于预处理器程序命令。C 中一些常见的预处理器指令是

  1. #include <header name>- 指示预处理器将给定文件的文本粘贴到当前文件。
  2. #if <value>- 检查值是否为真,如果是,它将包含代码,直到#endif
  3. #define- 用于定义常量和创建

是某些代码片段的名称。因此,无论在何处使用该名称,它都会预处理程序的代码片段替换。

例如:

#define BUFFER_SIZE 100
在您的代码中,无论您使用 BUFFER_SIZE ,它都会被 100
int a=BUFFER_SIZE;
a 替换为 100

C中还有许多预定义的宏,例如__DATE____TIME__等等。

于 2016-04-02T12:18:15.330 回答