Clo*_*k_9 9 c global-variables c-preprocessor
是什么原因有2个机会:
#define?所以我知道是什么#define,但我不知道使用的区别是什么.我必须拥有哪种情况,因此我能够在正确的机会中做出自己的决定?什么是能够做到另一个没有的机会?我希望我能澄清一下我的意思.
那么,可以从任何地方编辑全局变量.
基本上,在低级别中,变量存储在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;
Run Code Online (Sandbox Code Playgroud)
并且,在大多数情况下,定义用于设置某些特定于操作系统或特定于硬件的值.这是一个非常强大的功能,因为它为您提供了在编译步骤中动态更改内容的机会.例如:
// 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
Run Code Online (Sandbox Code Playgroud)
考虑这个小例子
#define num 5
int number = 5;
Run Code Online (Sandbox Code Playgroud)
num是一个宏,number是一个全局变量.
一个重要的区别是num没有存储在内存中,num只是替代5,而是number使用内存.
此外,宏是预处理程序指令,它们的值不能像变量一样更改.
所以,没有做
num = 6;
Run Code Online (Sandbox Code Playgroud)
稍后在代码中.您将不得不使用#undef它来取消定义它并再次定义它来更改值.
| 归档时间: |
|
| 查看次数: |
8906 次 |
| 最近记录: |