C++宏定义求教!

宏定义是不是就是个字面上的替换?
假如我写一个函数,其返回值是一个枚举型,该枚举型内的所有常量我都给分别宏定义成一个main函数里声明过的变量标识符,那么该函数的返回值能否就是对应变量的引用?

宏定义是简单的字符替换
enum dir { dir_up,dir_down,dir_left,dir_right}
0 1 2 3
case dir_up: 就相当于 case 0:追问

您好,您看我的问题描述的那种可以实现吗?

追答

可以 宏定义在预编译处理后就替换为对应的字符了 变量名也是字符嘛
楼下说的危险我还没发现。说危险就不用,就说C的指针,同样是危险地东西,它的危险就在于它的强大,难道C程序员就不用了么?那不如去用JAVA,

追问

可是我的代码字面上并不出现这些字符啊,替换也会发生?

追答

代码上不会出现?
你是说二进制代码?

追问

就是cpp内的C++代码。我的代码上不会出现该枚举型的任何一个常量的字面,也就是dir_up什么的,这种转换就不起作用了吗?

追答

cpp内的代码有dir_up的 只是编译后的二进制代码上没有,在编译的时候dir_up 会被编译器替换成0
所有枚举值都会替换成对应的值

追问

不是这个意思啊。
以您定义的枚举为例吧。
enum dir { dir_up,dir_down,dir_left,dir_right}
我的宏定义便是:
#define dir_up var1
#define dir_down var2
...
我的函数声明大致是 dir Func(..),
我直接要用该返回值来进行成员访问。
该函数的使用大致就是:Func(...).name()什么的,这个成员函数的名称name自然根据返回值的类型来确定。

追答

QQ上说吧 你QQ多少? 我的357025230

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-29
宏是一个很不安全的东西,在C++中应该尽量避免使用才对。追问

您好,您还是看看我所描述的那个情况可否实现吧。

追答

这个不是宏定义,应该是枚举常量。它是安全的。你的设计也可以实现。

相似回答