宏和预处理器的区别

16

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

我们能否说#include#if#ifdef等也是宏定义,还是它们被称为其他名称?或者说,宏只是用于# define语句的术语吗?

如有不妥之处,请纠正。

4个回答

37

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

#include#if#ifdef#ifndef#else#elif#endif#define#undef#line#error#pragma 都是预处理指令。(只包含 # 的行也是预处理指令,但不起作用。)

#define blah 8 是一条预处理指令,它不是宏定义。 blah 才是宏。 这条 #define 预处理指令将名为 blah 的宏定义为一个对象式宏,其被替换成标记 8


4

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

#define blah 8

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

  • 宏是#define语句的结果。
  • 预处理器是C语言的一个特性。

4

预处理器:执行预处理(包括文件包含、宏展开、条件编译)的程序。

宏:由#define预处理指令定义的单词,其会被求值为某个其他表达式。

预处理指令:由预处理器识别出来的特殊#-关键字。


2

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

可以把预处理器看作是在编译器运行之前执行的程序。

预处理指令就像是预处理器程序命令。C语言中一些常见的预处理指令有:

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

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

例如:

#define BUFFER_SIZE 100
在您的代码中,无论何处使用BUFFER_SIZE,它都会被替换为100
int a=BUFFER_SIZE;
这里a变成了100

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接