使用类对象宏是定义全局变量的好方法吗?
Is using object-like macros a good way to define global variables?
我的老师告诉我预处理器命令 #define 是声明全局变量的方法。基本上我使用 object-like macros
#define x 3
声明x为全局变量。现在,我习惯于做类似的事情来定义这些类型的变量,我被建议不要再这样做了:
#include <stdio.h>
const int x = 3;
int main(void){...};
据我所知(考虑到我是 C 和一般编程的新手),如果我们谈论程序的工作原理,那么声明全局变量的两种方式实际上是相同的.
假设我有这样的代码:
y = x * 3;
此代码将编译并 运行 完全没有问题,同时使用 #define x 3
和 const int x = 3;
。现在,我肯定在这里遗漏了一些东西,但我真的看不出有什么不同!谁能温柔地告诉我这个问题的重点是什么?
#define
曾用于创建常量,而不是变量,但现在为此目的不受欢迎。 #define x 3
是一个预处理器指令,基本上意味着 "replace x
with 3
everywhere in the source file"。这就像在打开 "match whole word" 和 "case-sensitive" 选项的代码编辑器中进行搜索和替换。
另一方面,const
创建一个合法的标识符,其中包含地址和范围以及所有内容。它可以像变量一样使用,甚至可以使用 &
(地址)运算符。就是不能赋值给。
对于这一小段代码,#define 和 Const 值没有区别。但是,如果您正在编写性能关键代码,请考虑#define,因为它使您的价值成为全球性的,它是编译器的 pre-processed 而 Const 具有正常查找。
优点是 #define 会自动替换每次出现的名称。
缺点是如果您在代码中多次使用相同的名称,它会发生冲突。
我的老师告诉我预处理器命令 #define 是声明全局变量的方法。基本上我使用 object-like macros
#define x 3
声明x为全局变量。现在,我习惯于做类似的事情来定义这些类型的变量,我被建议不要再这样做了:
#include <stdio.h>
const int x = 3;
int main(void){...};
据我所知(考虑到我是 C 和一般编程的新手),如果我们谈论程序的工作原理,那么声明全局变量的两种方式实际上是相同的. 假设我有这样的代码:
y = x * 3;
此代码将编译并 运行 完全没有问题,同时使用 #define x 3
和 const int x = 3;
。现在,我肯定在这里遗漏了一些东西,但我真的看不出有什么不同!谁能温柔地告诉我这个问题的重点是什么?
#define
曾用于创建常量,而不是变量,但现在为此目的不受欢迎。 #define x 3
是一个预处理器指令,基本上意味着 "replace x
with 3
everywhere in the source file"。这就像在打开 "match whole word" 和 "case-sensitive" 选项的代码编辑器中进行搜索和替换。
const
创建一个合法的标识符,其中包含地址和范围以及所有内容。它可以像变量一样使用,甚至可以使用 &
(地址)运算符。就是不能赋值给。
对于这一小段代码,#define 和 Const 值没有区别。但是,如果您正在编写性能关键代码,请考虑#define,因为它使您的价值成为全球性的,它是编译器的 pre-processed 而 Const 具有正常查找。 优点是 #define 会自动替换每次出现的名称。 缺点是如果您在代码中多次使用相同的名称,它会发生冲突。