你可能也不会的问题 找了很久找不到 ************************************************\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次回复了,就只能说到这里了,我感觉我自己是不可能再想出什么办法了)
[解决办法]
楼主的用意是什么呢,也许还有其他方法。