结构对于其他文件的可见性如何表现?

2024-02-27

这是摘自对 SO 上另一个问题的回答:

结构定义对于源文件来说是私有的,除非放置在 共享头文件。没有其他源文件可以访问该成员 struct,即使给定一个指向该结构的指针(因为布局不是 在其他编译单元中已知)。

如果该结构需要在其他地方使用,则必须仅将其用作 指针。放置 struct structname 形式的前向声明; typedef 结构体 结构体名称 结构体名称;在头文件中,并使用 structname * 代码库中其他任何地方。那么,自从 结构体成员只出现在一个源文件中,该结构体的 内容对于该文件来说实际上是“私有的”。

这让我很困惑。为什么即使包含声明它(但未定义它)的头文件也只能使用指向结构的指针?

我的意思是,如果我包含一个声明函数的标头,该函数是在单独的实现文件中定义的,我仍然可以访问该函数 - 为什么结构不同?即使您可以获得声明,为什么他们的成员也是私有的?


这与可见性无关。引用引用的是一个结构体前向声明(因此,没有可用的定义)

标头实际上包含类似以下内容:

struct X;  // No definition available

前向声明引入了不完全型。对于不完整的类型,您可以做的事情很少,但其中之一就是声明一个指针(而不是取消引用它)。

只要编译器不知道结构体的大小或其成员(它当然不能通过简单的前向声明),它就不允许任何声明X,也不对指向某个指针的任何取消引用X.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

结构对于其他文件的可见性如何表现? 的相关文章

随机推荐

  • 在 Objective C 中将对象添加到 NSMutableArray 时遇到问题

    我正在使用 iPhone SDK 但在执行一些简单操作时遇到问题 我正在尝试添加一个NSNumber反对NSMutableArray实例变量 我尝试添加 NSNumbercard到 NSMutableArray已查看的卡片数组 但是如果不破
  • 如何点击外部关闭这个菜单?

    我有这个菜单 CSS message display none position absolute width 120px background fff color 000 font weight bold 当我点击它时 它会打开 mess
  • Twitter 引导程序预先输入多个值?

    我正在使用 Twitter Bootstrap 和 Jquery 我想使用预先输入文本区域的函数 我可以非常轻松地使用它 但我也需要它允许多项选择 我的意思是 当我从自动完成中选择一个单词后 它会将我带回文本区域 然后再添加一个空格 然后如
  • crt0.o 和 crt1.o -- 有什么区别?

    最近我一直在尝试调试一些低级工作 但找不到crt0 S对于编译器 avr gcc https linux die net man 1 avr gcc 但我确实找到了crt1 S 与相应的 o files 这两个文件有什么区别 是crt1完全
  • Quasar:使用q-file选取图像时如何显示图像?

    Quasar 和 Vue 的新手 我正在使用 q file 它允许选择文件并拖放文件 但是 如何显示预览图像 Q uploader 似乎可以工作 但我如何更改它的用户界面 来自 Quasar 的组件链接 https quasar dev v
  • Haskell 使用数据构造函数过滤嵌套列表

    假设我有以下数据类型 data Number Positive Integer Negative Integer deriving Eq Show 我有一个函数定义 请注意 我无法更改此定义 或以任何方式解决它 我必须使用嵌套列表并以某种方
  • set_error_handler函数不调用自动加载

    我有set error handler 函数设置为在出现错误时调用函数 在该函数中 我有自己的异常类实现 function acs error handler errno errstr errfile errline throw new a
  • android中找不到文件异常

    我在java中使用加密并在php中执行解密 现在 当我将加密参数传递给 url 时 我没有得到正确的响应 这是我的安卓代码 public static InputStream multipartPOST String urlStr Hash
  • 当 json 解析空响应时 Whatwg Fetch 失败,如何防止它?

    我在前端和后端 NodeJS 都使用 Fetch API 在将响应解析为 json 时 我经常遇到一个问题 response json 将返回一个承诺 所以我事先不知道响应的正文是什么 当正文为空时 JSON 解析将失败并出现错误 Synt
  • 添加新字段后 Prisma 架构无法正确更新

    正如标题所述 我在 Next JS 应用程序中使用 Prisma 2 我有一个非常简单的架构 model User id Int id default autoincrement firstName String middleName St
  • Google 脚本中的 document.getelementbyId 不起作用

    我正在尝试制作一个 google script web 应用程序 它从 HTML 表单获取输入并将输入传递给脚本 现在 该功能失败是因为document getelementbyId text 回报null而不是实际的表单值 我怎样才能解决
  • AttributeError:模块“tensorflow.python.keras.utils.generic_utils”没有属性“populate_dict_with_module_objects”

    当我导入 keras 时 即使昨天运行正常 也会弹出上面的错误 我该如何解决这个错误 我正在 Windows 10 上工作 我的keras版本是 2 2 4 我的张量流版本是 2 2 0rc2 完整的错误回溯如下所示 Traceback m
  • 使用公共链接将公共对象上传到 Google Cloud Storage

    我已经到处搜索 但找不到解决方案 如何将公共对象上传到我的谷歌云存储 我想拥有它 这样一旦图像上传 世界上任何人都可以查看 It seems I can only get this done if I manually click the
  • 如何使用 PDO 和 SQL Server 获取最后插入行的 ID?

    在其他情况下我可能会想使用 result mssql query INSERT INTO table fields VALUES data SELECT CAST scope identity AS int 但由于我将插入用户提交的数据 我
  • 如何对 WIX 合并模块进行单元测试?

    我正在使用 WIX 构建合并模块 调用 WIX 工具从 wxs 文件生成合并模块的批处理文件由我的日常构建运行 我试图弄清楚如何自动化这些合并模块的测试 我想测试的是 合并模块是否安装了所需的文件 文件的版本是否正确等 我的一个想法是编写一
  • 使用 support-v7-appcompat 在 ActionBar 中搜索视图

    我一直在努力使用 support v7 库让 SearchView 小部件在操作栏中展开 当我的目标是 4 0 时 我已经设法在没有支持库的情况下让它工作 但我想为 2 3 编写应用程序 所以我需要使用支持库 我使用以下 menu xml
  • 具有自定义视图的扩展工具栏未以全宽显示

    我在这里浏览了很多与工具栏相关的答案 但没有一个答案可以帮助我 我想要实现的是拥有一个扩展工具栏 它将显示一个徽标 可能是活动 应用程序的名称 它将在右侧有一个操作按钮 抽屉切换开关 它将显示一个类似导航的抽屉右侧是一个带有其他选项 如设置
  • 如何为 PyQt QTabwidget 着色

    我有一个包含 QTabWidget 的 PyQt 主窗口 选项卡小部件包含一些按钮和文本框 我想为整个选项卡背景着色 而不仅仅是在选项卡栏区域中粘贴的选项卡 我没有使用样式表 并且更喜欢使用调色板 因为我已经在使用调色板 但如果样式表是唯一
  • 线程“main”中的异常 java.lang.NoClassDefFoundError: gherkin/formatter/Formatter

    我正在学习如何使用 Cucumber 在 JAVA 中编写 BDD 测试脚本 但是 我不断收到上述错误 但不知道为什么 我有 Cukes Gherkin 作为依赖 POM
  • 结构对于其他文件的可见性如何表现?

    这是摘自对 SO 上另一个问题的回答 结构定义对于源文件来说是私有的 除非放置在 共享头文件 没有其他源文件可以访问该成员 struct 即使给定一个指向该结构的指针 因为布局不是 在其他编译单元中已知 如果该结构需要在其他地方使用 则必须