关于#define的疑问

pcwe2002 2008-07-22 01:56:30
我看到代码中有这样的定义
#deinfe FILE_VERSION_(x) #x
#deinfe FILE_VERSION(x) FILE_VERSION_(x)
不明白为什么要定义两次呢?看到一本书上也有这样的定义
书上让自己去思考,实在不明白,请教高手
...全文
183 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
天下无雪 2008-07-26
  • 打赏
  • 举报
回复
看不懂哦~~~
red-fly 2008-07-26
  • 打赏
  • 举报
回复
有空去看一下14楼的再说,现在下班了,没时间了
咋了啦 2008-07-24
  • 打赏
  • 举报
回复
八楼的正解
grachel 2008-07-24
  • 打赏
  • 举报
回复
#define A(x) T_##x
#define Bx) #@x
#define Cx) #x
我们假设:x=1,则有:
A(1)=======T_1
B(1)======'1'
C(1)======"1"
还有一个比较常见的宏:_T
TCHAR tStr[] = _T("t code");
_T宏的作用就是转换成TCHAR。

从李书刚的博客中得到了这样的内容:http://blog.csdn.net/hustli/archive/2003/06/30/19343.aspx
grachel 2008-07-24
  • 打赏
  • 举报
回复
支持8楼说法,但不晓得为什么
Tian_Dao_Akane 2008-07-24
  • 打赏
  • 举报
回复
开始也以为这么做仅是为了支持两种不同的写法而已,但试了下8楼朋友的代码以后,的确得到不同的输出结果。迷茫了:到底那两行printf的代码展开以后变成什么样子的呢??期待楼下有朋友能作进一步的说明。
deryker 2008-07-22
  • 打赏
  • 举报
回复
8楼不错
pcwe2002 2008-07-22
  • 打赏
  • 举报
回复
我知道一个有下划线一个没有,如果一样编译都通不过,只是为什么这样定义没有明白

在宏定义的用法问题, 一次与两次效果不一样的

#define FILE_VERSION_(x) #x
#define FILE_VERSION(x) FILE_VERSION_(x)

一次是对象名, 两次是数值字符串

printf("%s", FILE_VERSION_(MAX_PATH)); //字符串 "MAX_PATH"
printf("%s", FILE_VERSION(MAX_PATH)); //字符串 "260"

觉得是这样,不知道有没有其它的意义
Amuro1987218 2008-07-22
  • 打赏
  • 举报
回复
学习.
zhouzhenyan 2008-07-22
  • 打赏
  • 举报
回复
支持两种写法,所以定义了两个,不是定义两次。
zhkefa 2008-07-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cnzdgs 的回复:]
不是定义两次。前一个有下划线,后一个没有,目的是支持两种写法。
[/Quote]

这个要好仔细才看到,,,
huyansoft 2008-07-22
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20080527/00/3ebb4af2-47ee-4e05-9406-7289112666f7.html
ISO/ANSI C标准译文与注解 C/C++预处理部分
P153的6.10.3.2小节关于#操作符的叙述,和该页注解⑤
scq2099yt 2008-07-22
  • 打赏
  • 举报
回复
不是定义两次。前一个有下划线,后一个没有,目的是支持两种写法。
gaoteng1984 2008-07-22
  • 打赏
  • 举报
回复
牛X, 帮顶~
sonymenu 2008-07-22
  • 打赏
  • 举报
回复
这个问题我也遇到过,我现在加了一个群,这个群人气较好,也的确有高手,不但可以交流问题,而且还可以接项目赚钱,QQ群号是:陆!肆!柒!玖!捌!柒!伍!伍,不要说我做广告,看看便知,如需要的话加入试试,如果你发现好的交流群也别忘了告诉我啊!呵呵!
red-fly 2008-07-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zzz3265 的回复:]
# 在宏定义的用法问题, 一次与两次效果不一样的

#define FILE_VERSION_(x) #x
#define FILE_VERSION(x) FILE_VERSION_(x)

一次是对象名, 两次是数值字符串

printf("%s", FILE_VERSION_(MAX_PATH)); //字符串 "MAX_PATH"
printf("%s", FILE_VERSION(MAX_PATH)); //字符串 "260"
[/Quote]
果然如此!这是为什么?
schlafenhamster 2008-07-22
  • 打赏
  • 举报
回复
#deinfe FILE_VERSION_(x) #x
#deinfe FILE_VERSION(x) FILE_VERSION_(x)

第一次定义FILE_VERSION_(x)为#x

第一次定义FILE_VERSION(x)为FILE_VERSION_(x)
Yofoo 2008-07-22
  • 打赏
  • 举报
回复
# 在宏定义的用法问题, 一次与两次效果不一样的

#define FILE_VERSION_(x) #x
#define FILE_VERSION(x) FILE_VERSION_(x)

一次是对象名, 两次是数值字符串

printf("%s", FILE_VERSION_(MAX_PATH)); //字符串 "MAX_PATH"
printf("%s", FILE_VERSION(MAX_PATH)); //字符串 "260"
schlafenhamster 2008-07-22
  • 打赏
  • 举报
回复
#deinfe FILE_VERSION_(x) #x
#deinfe FILE_VERSION(x) FILE_VERSION_(x)

没有2次定义

第一个是凡是遇到FILE_VERSION_(x)的地方表示#x
第二个是凡是遇到FILE_VERSION(x)的地方表示FILE_VERSION(x)
schlafenhamster 2008-07-22
  • 打赏
  • 举报
回复
#deinfe FILE_VERSION_(x) #x
#deinfe FILE_VERSION(x) FILE_VERSION_(x)

没有2次定义

第一个是凡是遇到FILE_VERSION_(x)的地方表示#x
第二个是凡是遇到FILE_VERSION(x)的地方表示FILE_VERSION(x)
加载更多回复(5)

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧