首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

你可能也不会的有关问题 找了很久找不到 *\r\n你可能也不会的有关问题 找了很久找不到

2014-07-07 
你可能也不会的问题找了很久找不到************************************************\r\n你可能也不会的

你可能也不会的问题 找了很久找不到 ************************************************\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次回复了,就只能说到这里了,我感觉我自己是不可能再想出什么办法了)



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

热点排行