#define指令是指向preprocessor的指令,这意味着它在编译任何东西之前被预处理器调用。 因此,如果您键入: #define NUMBER 100 然后你输入: int x = NUMBER; 你的编译器实际上 * 看到 * 的只是: int x = 100; 这基本上就像你在一个字处理器中打开了你的源代码,并做了一个查找/替换,把每个出现的“NUMBER”替换为“100”。所以你的编译器不知道NUMBER的存在。只有预编译预处理器知道NUMBER的含义。 所以,如果你试图获取NUMBER的地址,编译器会认为你试图获取一个整数常量的地址,这是无效的。
5条答案
按热度按时间yrdbyhpb1#
#define
指令是指向preprocessor的指令,这意味着它在编译任何东西之前被预处理器调用。因此,如果您键入:
#define NUMBER 100
然后你输入:
int x = NUMBER;
你的编译器实际上 * 看到 * 的只是:
int x = 100;
这基本上就像你在一个字处理器中打开了你的源代码,并做了一个查找/替换,把每个出现的“NUMBER”替换为“100”。所以你的编译器不知道
NUMBER
的存在。只有预编译预处理器知道NUMBER
的含义。所以,如果你试图获取
NUMBER
的地址,编译器会认为你试图获取一个整数常量的地址,这是无效的。gfttwv5a2#
不可以,因为
#define
是用于文本替换的,所以它不是一个可以获取指针的变量。在代码被传递到编译器之前,你会看到它实际上被#define
的定义所取代,所以没有任何东西可以获取地址。如果你需要一个常量的地址,定义一个const
变量(C++)。使用常量而不是宏通常被认为是一种好的做法,因为常量实际上表示变量,具有自己的作用域规则和数据类型。宏是全局的和无类型的,在大型程序中,它们很容易使读者感到困惑(因为读者看不到实际存在的内容)。
xjreopfe3#
#define
定义了一个宏。一个宏只会导致一个标记序列被另一个标记序列替换。指针和宏是完全不同的东西。如果“
#define
constant”是指扩展为数值的宏,答案仍然是否定的,因为在任何地方使用宏时,它都会被该值替换。例如,无法获得指向数字42
的指针。ejk8hzay4#
有一种方法可以解决这个问题:
或者如果你知道它的类型,你甚至可以这样做:
并使用它:
你有一个指向 #define 常量的指针。
scyqe7ek5#
这在C/C++中是不可能的。
可以使用#define指令为程序中的常量给予一个有意义的名称。
我们可以以两种形式使用它。
请:查看此链接
http://msdn.microsoft.com/en-us/library/teas0593%28VS.80%29.aspx
define指令可以包含类似对象的定义或类似函数的定义。
抱歉,我不能再眨眼睛了...请参阅IBM链接.下面是我的链接链接。
你可以从上面的两个链接中获得完整的信息。