使用类似对象的宏是定义全局变量的好方法吗?

时间:2016-01-13 23:07:03

标签: c macros global-variables const c-preprocessor

我的老师告诉我,预处理器命令 #define 是声明全局变量的方法。基本上我使用object-like macros

#define x 3

x 声明为全局变量。现在,我习惯于做类似的事情来定义这些变量,我建议不再那样做了:

#include <stdio.h>

const int x = 3;

int main(void){...};

据我所知(让我们考虑一下我是C和编程的新手),如果我们谈论的话,宣布全局变量的两种方式实际上是相同的。该计划如何运作。 假设我有一个像那样的代码:

y = x * 3;

此代码将使用#define x 3const int x = 3;编译并运行完全没有任何问题。现在,我肯定在这里遗漏了一些东西,但我真的看不出有什么不同!有人可以轻轻地告诉我问题的关键点吗?

2 个答案:

答案 0 :(得分:1)

#define用于创建常量,而不是变量,但现在为此目的不赞成。 #define x 3是一个预处理程序指令,基本上意味着“在源文件中的任何地方用x替换3”。这就像在代码编辑器中搜索和替换“匹配整个单词”和“区分大小写”选项一样。

另一方面,

const创建一个包含地址和范围以及所有内容的合法标识符。即使使用&(地址)运算符,它也可以像变量一样使用。它只是无法分配给。

答案 1 :(得分:1)

这段小代码的#define和Const值没有区别。但是,如果您要编写性能关键代码,请考虑#define,因为它使您的值全局化,它由编译器预处理而Const具有正常查找。 优点是#define会自动替换名称的每个出现。 如果您在代码中多次使用相同的名称,则会产生冲突。