读书人

你可能也不会的有关问题 找了很久找

发布时间: 2014-07-07 16:36:44 作者: rapoo

你可能也不会的问题 找了很久找不到 ************************************************\r\n你可能也不会的问题 找了很久找不到
问题 : 在宏中定义 # 号 ,我们知道 # 在宏中,把#后的字串变成字符串,##会和后面的字串合并成一个新的串,如果我想在 宏中 定义 # ,怎么办呢?


具体:

#define FF(X) \
#ifdef X \
..... \
#endif


我的目的
在程序用
#define DEF



FF(DEF)

扩展成

#ifdef DEF
.....
#endif


这个肯定是错的,那么,怎么才能在 #define 后定义的串中,包括#号




[解决办法]
有意义吗?实在不行,宏参可以传#,然后在宏展开后连接。

#define FF(DEF, SHARP)\
SHARP##ifdef DEF\
.....
SHARP##endif \


usage: FF(__MY_DEF__, #)
[解决办法]
Up
[解决办法]
我查看了下**.i里的内容 发现问题不少....
如果你使用了 续行符 那么预编译后的结果是
#ifdef #endif
这个仿佛是难以逾越的困难了....
也许我没说清楚.

#define A \
#ifdef \
#endif
A --> #ifdef #endif (我们需要它换行 可是它没有)
如果:
#define A \
#ifdef
#endif
那么A就只定义到了 #ifdef 就停止了 因为宏定义只能有一行..

所以这时候就需要一个符号 来告诉VC 这里要换行,,我很可笑的使用了 \n
呵呵 代码里确实有了\n
#ifdef \n #endif (呵呵)
百度搜索了下C++里是否有所谓的象\一样的换行符 结果貌似没有..我完全没听说过就也肯定没有了...建议给C++标准协会发邮件,叫他们添加这个符号,能将一行分为2行.呵呵....


总结: 宏定义的展开只能是一行的结果, 如果你想用宏来表达一个多行的结果,就肯定会失败.
而我们这里的#ifdef 和 #endif必须是多行的...就注定它不能用宏来代替.

当然我的总结是一厢情愿的,也可能头晕理解有误... 不排除有解决办法.
(3次回复了,就只能说到这里了,我感觉我自己是不可能再想出什么办法了)



[解决办法]
楼主的用意是什么呢,也许还有其他方法。

读书人网 >VC/MFC

热点推荐