c/c++语言开发共享C结构中的不完整类型

我有以下项目结构:

文件 – 啊

#pragma once struct best_fit_struct { void *next; size_t size; }; 

档案 – bh

 #pragma once typedef struct mm_t { int type; union { struct best_fit_struct best_fit_mm; } per_mm_struct; void *memory; } mm_t; 

文件 – bc

 #include "ah" #include "bh" 

在使用gcc -c bc编译bc时,它会抛出以下错误

file best_fit_mm has incomplete data type

我在bh之前已经包括ah ,所以顺序看起来对我来说很合适。

令人惊讶的是,如果我在bh包含ah ,事情就会得到解决。

    编译器必须知道每种数据类型的整个布局。 例如聚合中的每个字段,其偏移量(请参见offsetof ),其大小(请参阅sizeof ),其对齐方式(请参阅alignof )及其类型。

    所以编译器需要知道所有struct a (那里的所有字段)来计算struct b的布局(并且应该在struct b的定义点知道)。

    在实践中,你最好在标题开头附近添加#include "ah" 。 当然,您希望在头文件中添加包含警戒 。

    顺便说一句,我的偏好是避免使用很多小标题,我更喜欢有一些大标题,甚至可能是一个小项目的公共标题(你可以用gcc 预编译 ,看看这个答案)

    有时,为了调试与预处理器相关的错误,您可能会要求获得预处理的表单(例如,使用gcc -C -E source.c > source.i然后使用gcc -C -E source.c > source.i的编辑器或寻呼机查看)。

    如果文件bh使用项目表单文件ah那么你必须按照定义在bh包含ah

      以上就是c/c++开发分享C结构中的不完整类型相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/549207.html

      (0)
      上一篇 2021年1月13日
      下一篇 2021年1月13日

      精彩推荐