ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c++ 头文件相互包含导致编译问题

2021-07-21 16:03:16  阅读:236  来源: 互联网

标签:文件 头文件 符号 c++ 展开 编译 报错 预处理


根本原因是用到某个符号的时候符号还没声明,找不到符号导致编译报错

方法是make .. verbose=1,展示所有预处理,编译等详细过程

然后使用 gcc -E ,查看文件包含展开的情况

gcc -E circle.c -o circle.i

C语言代码在交给编译器之前,会先由预处理器进行一些文本替换方面的操作,例如宏展开、文件包含、删除部分代码等。

在正常的情况下,GCC 不会保留预处理阶段的输出文件,也即.i文件。然而,可以利用-E选项保留预处理器的输出文件,以用于诊断代码。-E选项指示 GCC 在预处理完毕之后即可停止。

 

在生成的.i文件里查找符号S,发现S的声明地方在S的使用地之后,这也就导致了编译找不到符号报错.

举个例子

b.h

include a.h

原先编译b.h的时候,a.h中的符号已经声明过

现在a.h中增加

include b.h

这样在a.h编译时,会先展开b.h。而其右依赖a.h。但a.h这时还没到符号展开那步,岁报错

标签:文件,头文件,符号,c++,展开,编译,报错,预处理
来源: https://www.cnblogs.com/wangshaowei/p/15039890.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有