gpt4 book ai didi

c - 结构在其他文件的可见性方面如何表现?

转载 作者:行者123 更新时间:2023-12-01 23:48:21 25 4
gpt4 key购买 nike

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

A structure definition is private to a source file unless placed in a shared header file. No other source file can access the members of the struct, even if given a pointer to the struct (since the layout is not known in the other compilation unit).

If the struct needs to be used elsewhere, it must be used only as a pointer. Put a forward declaration of the form struct structname; typedef struct structname structname; in the headerfile, and use structname * everywhere else in your codebase. Then, since the structure members appear only in one source file, the structure's contents are effectively 'private' to that file.

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

我的意思是,如果我包含一个声明函数的 header ,一个在单独的实现文件中定义的函数,我仍然可以访问该函数——为什么结构不同?为什么他们的成员是私有(private)的,即使你可以声明?

最佳答案

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

header 有效地包含如下内容:

struct X;  // No definition available

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

只要编译器不知道结构的大小,或者它的成员(它肯定不能使用简单的前向声明),它就不允许任何X 的声明>,也不是对指向 X 的指针的任何取消引用。

关于c - 结构在其他文件的可见性方面如何表现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27933144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com