【发布时间】:2012-08-11 02:11:20
【问题描述】:
据我了解,#define blah 8 是一个宏。而# 是预处理器指令。
我们可以说#include、#if、#ifdef 等吗?也是宏,还是它们被称为别的东西?还是宏只是用于#define 语句的术语?
如果我错了,请纠正我。
【问题讨论】:
标签: c c-preprocessor
据我了解,#define blah 8 是一个宏。而# 是预处理器指令。
我们可以说#include、#if、#ifdef 等吗?也是宏,还是它们被称为别的东西?还是宏只是用于#define 语句的术语?
如果我错了,请纠正我。
【问题讨论】:
标签: c c-preprocessor
预处理器在将源文件交给编译器之前对其进行修改。
将预处理器视为在编译器之前运行的程序。
预处理器指令类似于预处理器程序的命令。C中一些常见的预处理器指令是
#include <header name> - 指示预处理器将给定文件的文本粘贴到当前文件。#if <value> - 检查值是否为真,如果是,它将包含代码直到#endif
#define - 用于定义常量和创建宏
宏是某些代码片段的名称。因此,无论在何处使用该名称,它都会被预处理程序的代码片段替换 >。
例如:
#define BUFFER_SIZE 100
在您的代码中,无论您使用 BUFFER_SIZE,它都会被替换为 100int a=BUFFER_SIZE;
a 在这里变成 100
C 中还有很多预定义的宏,例如__DATE__、__TIME__ 等。
【讨论】:
Preporcessor:进行预处理(文件包含、宏扩展、条件编译)的程序。
宏:由 #define 预处理器指令定义的词,计算结果为其他表达式。
预处理器指令:一个特殊的#-keyword,被预处理器识别。
【讨论】:
#include、#if等是预处理器的特性。
#define blah 8
是一个预处理指令并声明一个名为blah的新宏。
#define 语句的结果。【讨论】:
以# 开头的行是预处理指令。它们是告诉预处理器做某事的指令。
#include、#if、#ifdef、#ifndef、#else、#elif、#endif、#define、#undef、#error、#error、@9876543332 @ 都是预处理指令。 (只包含#的行也是预处理指令,但没有作用。)
#define blah 8 是预处理指令,它不是宏。 blah 是一个宏。这个#define 预处理指令将名为blah 的宏定义为被标记8 替换的类对象宏。
【讨论】: