#define只定义宏名不定义值的作用是什么?

inspire_YI 2014-12-26 10:02:08
这几天在看侯捷的《STL源码剖析》,前面几页已经觉得困难
例如里面讲解的<stl_config.h>这个头文件,其中有这样的一段代码
#ifdef __STL_NEED_TYPENAME
# define typename
#endif
根据书中所说,编译器有可能不支持typename关键字,那这样定义有什么用,还有只定义宏名不定义值,会有默认值出现吗?
...全文
1601 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2014-12-29
  • 打赏
  • 举报
回复
引用 2 楼 yjx19930417 的回复:
[quote=引用 1 楼 turingo 的回复:] 提供选项,不支持的时候,不定义__STL_NEED_TYPENAME宏就好。
前面有一段代码是这样写的 #if !defined(_TYPENAME_IS_KEYWORD) # define __STL_NEED_TYPENAME #endif 再结合 #ifdef __STL_NEED_TYPENAME # define typename #endif 不是应该理解为编译器不支持typename关键字,则自己定义typename关键字吗?后面是怎样实现的。还是不太懂。 [/quote] 不支持 typename 关键字的编译器, 在这时候,也不需要一个 typename 这样的关键字来指示 某个标识符是个 typename 支持typename 关键字的编译器, 在这时候,需要一个 typename 这样的关键字来指示 某个标识符是个 typename 或者 至少不排斥这种用法 所以 这这种预编译语句, 可以解决支持和不支持 typename 关键字的编译器的兼容问题
fly_dragon_fly 2014-12-26
  • 打赏
  • 举报
回复
1. 这里为了防止当你的程序中出现 typename时, 如果编译器不支持,就把typename换成空的。 2. 宏名和宏值是分开的,定义时有就有。
赵4老师 2014-12-26
  • 打赏
  • 举报
回复
可以当此时值为空串来理解。
inspire_YI 2014-12-26
  • 打赏
  • 举报
回复
引用 1 楼 turingo 的回复:
提供选项,不支持的时候,不定义__STL_NEED_TYPENAME宏就好。
前面有一段代码是这样写的 #if !defined(_TYPENAME_IS_KEYWORD) # define __STL_NEED_TYPENAME #endif 再结合 #ifdef __STL_NEED_TYPENAME # define typename #endif 不是应该理解为编译器不支持typename关键字,则自己定义typename关键字吗?后面是怎样实现的。还是不太懂。
图灵狗 2014-12-26
  • 打赏
  • 举报
回复
提供选项,不支持的时候,不定义__STL_NEED_TYPENAME宏就好。
「已注销」 2014-12-26
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
可以当此时值为空串来理解。
又涨知识了

65,028

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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