指向#define的指针

Mah*_*esh 4 c c-preprocessor

我只是想知道是否有可能指向#define常量的指针.如果是的话,该怎么办?

Cha*_*via 12

#define指令是预处理器的指令,这意味着它甚至在编译任何内容之前由预处理器调用.

因此,如果您输入:

#define NUMBER 100

然后你输入:

int x = NUMBER;

您的编译器实际看到的只是:

int x = 100;

这基本上就像你在一个文字处理器中打开了你的源代码并进行了一次查找/替换,将每个"NUMBER"替换为"100".所以你的编译器不知道是否存在NUMBER.只有预编译预处理器知道什么NUMBER意思.

因此,如果您尝试获取地址NUMBER,编译器会认为您正在尝试获取整数文字常量的地址,这是无效的.


Meh*_*dad 11

不,因为#define是文本替换,所以它不是一个变量,你可以得到一个指针 - 你看到的实际上被#define代码传递给编译器之前的定义所取代,所以没有什么可以取得地址的.如果需要常量的地址,请const改为定义变量(C++).

通常认为使用常量而不是宏是一种好习惯,因为它们实际上代表变量,具有自己的范围规则和数据类型.宏是全局的,无类型的,在大型程序中很容易使读者感到困惑(因为读者看不到实际存在的内容).