| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 907 人关注过本帖
标题:#include ABCD_EFG 注意:不是包含任何头文件
只看楼主 加入收藏
melody_rain
Rank: 2
等 级:论坛游民
帖 子:19
专家分:10
注 册:2012-7-25
结帖率:80%
收藏
已结贴  问题点数:20 回复次数:11 
#include ABCD_EFG 注意:不是包含任何头文件
#include ABCD_EFG 不是#include "ABCD_EFG",也不是#include <ABCD_EFG>

ABCD_EFG是一个宏,那么#include ABCD_EFG在编译的过程中有什么作用?
thx~
搜索更多相关主题的帖子: include 
2012-08-07 09:55
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
就是替换成那个宏的内容呗。如果那个宏既不是 "xxx" 也不是 <xxx> 恐怕就要出问题。

没有见过用这种技术的。如果根据不同的条件要包的头文件在不同,一般就是用条件编译。
很想像头文件的名字是不确定的,要用变量或者宏来指示。即使是自动生成的头文件,往往也是提前指定一个固定的名字,或者是有严格规律的名字,以方便自动生成代码。
2012-08-07 10:51
melody_rain
Rank: 2
等 级:论坛游民
帖 子:19
专家分:10
注 册:2012-7-25
收藏
得分:0 
回复 2楼 pangding
#include ABCD_EFG这种形式的真实存在的
我看的工程里有这个形式。而ABCD_EFG是定义在makefile里的。网上查到这个是#include的一个用法,不过我还是不明白这样做法的用处...
2012-08-07 11:12
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
定义在 makefile 里是有可能的。目的应该也是为了能自动生成代码。

makefile 可以控制很复杂的逻辑,也许是开发者没有想到用宏替换的其它方法。或者是其它方法不够简便。
我没有见过这样的实例,一时也很难解释为什么要这么写。你那个 makefile 长不长?不长的话也许可以传上来看一眼。
2012-08-07 15:45
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
编译时加个输出预处理后文件的参数,看看预处理之后那是什么。在makefile的指令中,一定有一条DEFINE指令是定义这个宏的,想在make的时候临时指定包含文件而已。

[ 本帖最后由 TonyDeng 于 2012-8-7 16:35 编辑 ]

授人以渔,不授人以鱼。
2012-08-07 16:17
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
那串字母标识符一定是字符串文本,printf()一下也应该看到是什么东西,除非你连编译都不过。

授人以渔,不授人以鱼。
2012-08-07 16:18
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
回复 6楼 TonyDeng
楼主可能知道那个宏的内容是什么,我觉得他只是想知道为什么要写成那样。有什么特殊目的。
2012-08-07 21:02
melody_rain
Rank: 2
等 级:论坛游民
帖 子:19
专家分:10
注 册:2012-7-25
收藏
得分:0 
以下是引用pangding在2012-8-7 21:02:36的发言:

楼主可能知道那个宏的内容是什么,我觉得他只是想知道为什么要写成那样。有什么特殊目的。



那个宏在makefile里貌似只是起到一个编译开关作用,makefile里可以定义通过开启关闭这个宏来在编译的时候产生一些效果。
但是用#include ABCD_EFG,我就不懂它到底想做什么。ABCD_EFG并不代表一个.h文件,那么这样做能有什么结果?挺奇怪了...
2012-08-08 09:20
melody_rain
Rank: 2
等 级:论坛游民
帖 子:19
专家分:10
注 册:2012-7-25
收藏
得分:0 
btw,这个makefile不方便上传,不好意思~
2012-08-08 09:21
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
那个宏扩展之后是什么内容?
2012-08-08 09:52
快速回复:#include ABCD_EFG 注意:不是包含任何头文件
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029350 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved