是什么原因有2个机会:
#define
?所以我知道#define
做了什么,但我不知道使用的区别是什么。
我必须拥有哪种情况,因此我能够在正确的机会中做出自己的决定?什么是能够做到另一个没有的机会?我希望我能澄清一下我的意思。
答案 0 :(得分:6)
考虑这个小例子
#define num 5
int number = 5;
num
是一个宏,number
是一个全局变量。
一个重要区别是num
未存储在内存中,num
只是5的替代,但number
使用内存。
此外,宏是预处理器指令,它们的值不能像变量那样改变。
所以,没有做
num = 6;
稍后在代码中。您必须使用#undef
取消定义它并再次定义它以更改值。
答案 1 :(得分:6)
嗯,可以从任何地方编辑全局变量。
基本上,在低级别,变量存储在RAM内存中并在启动应用程序后创建,它始终在RAM中有一个地址。定义只是宏,编译器只会在编译步骤中用其值替换定义名称。
#define
无法编辑,它只是一个宏。 #define
不只是关于价值观,你几乎可以定义所需的一切,例如:
// Defining a constant
#define PI 3.14
// Defining an expression
#define MIN(x,y) ((x)<(y))?(x):(y)
// Defining a piece of code
#define STOP_TIMER \
clock_gettime(CLOCK_REALTIME, &__t1); \
__lasttime = \
(double) (__t1.tv_sec - __t0.tv_sec) + \
(double) (__t1.tv_nsec - __t0.tv_nsec) / 1000000000.0;
并且,在大多数情况下,定义用于设置某些特定于操作系统或特定于硬件的值。它是一个非常强大的东西,因为它让你有机会在编译步骤中动态地改变事物。例如:
// Example with OS
#ifdef __linux__
#define WELCOME_STRING "welcome to Linux!"
#else
#define WELCOME_STRING "welcome to Windows!"
#endif
// Example with hardware
#if __x86_64__ || __ppc64__
#define USING_64BIT
#else
#define USING_NOT64BIT
#endif
答案 2 :(得分:2)
可以从任何地方访问和编辑全局变量。 #define常量无法编辑,只需阅读。
示例:
我们使用#define ERROR 666
为整个程序的错误定义程序员预编译时间常量。
我们使用全局变量来计算函数执行的操作次数,并且其他函数也可以读取该值。
将错误作为全局变量是没有意义的,因为它不应该被编辑,你不能使用#define x
作为计数器。
答案 3 :(得分:-4)
#define
在代码之上声明,它意味着在声明类之前。它用于定义(如名称所示)一个常量,可以读取但不能更改。
可以在代码上全局访问全局变量,同时更改。