zoukankan      html  css  js  c++  java
  • 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这时还没到符号展开那步,岁报错

  • 相关阅读:
    [CQOI2005]三角形面积并(计算几何+扫描线)
    第一天
    LA3026 周期 (kmp)
    HDU 1715 大菲波数 (java大数)
    根据身高重建队列(vector)
    K 连续位的最小翻转次数
    724. Find Pivot Index
    Two Sum
    c
    Most Powerful(状压DP水题)
  • 原文地址:https://www.cnblogs.com/wangshaowei/p/15039890.html
Copyright © 2011-2022 走看看