宏和预处理器之间的区别

时间:2012-08-14 18:07:12

标签: c c-preprocessor

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

我们可以说#include,#if,#ifdef等。也是宏,还是称为其他东西?或者,宏只是用于#define语句的术语?

如果我错了,请纠正我。

4 个答案:

答案 0 :(得分:28)

#开头的行是预处理指令。它们是指示预处理器执行某些操作的指令。

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

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

答案 1 :(得分:4)

#include#if等是预处理器的功能。

#define blah 8

是预处理程序指令并声明一个名为 blah 的新宏。

  • 宏是#define声明的结果。
  • 预处理器是C的一个特性。

答案 2 :(得分:4)

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

宏:由#define预处理程序指令定义的单词,用于计算其他表达式。

预处理程序指令:一种特殊的#-keyword,由预处理程序识别。

答案 3 :(得分:1)

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

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

预处理程序指令预处理程序命令类似.C中的一些常见预处理程序指令

  1. #include <header name> - 指示预处理器将给定文件的文本粘贴到当前文件中。
  2. #if <value> - 检查值是否为真如果是,它将包含代码,直到#endif
  3. #define - 用于定义常量和创建
  4. 是某些代码片段的名称。无论在何处使用该名称,预处理器程序都会通过代码片段替换 >。

    例如

    #define BUFFER_SIZE 100
    在您的代码中,只要您使用BUFFER_SIZE,就会被100替换 int a=BUFFER_SIZE;
    a在这里变为100

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