c - C 中的链接文件可以使用和不可以使用什么?
问题描述
最近,我一直在尝试将不透明指针作为一个编程概念来工作,而我遇到的主要困难之一是弄清楚什么是其他文件可用或不可用。在上一个问题中,我未能尝试创建指向结构的不透明指针,即使答案解释了如何解决该问题,我仍然不太明白我哪里出错了。
我认为如果在 中定义了一个结构,如果两个文件都包含其中包含该结构的声明,file2.c
则可以使用它吗?这对我来说并不完全有意义。两个文件都使用,所以我可以看到他们将如何访问其中的内容,但我不明白他们将如何使用它来相互访问。file1.c
header.h
header.h
当我开始编程时,我认为这很简单,你有程序文件,它们不能相互访问任何东西,这些程序文件可以#include 带有定义和声明的头文件(例如file1.c
可以访问变量/functions/etc. 中定义header.h
)。事实证明我错了,事情要复杂得多。
因此,据我所知,如果包含,则可以在不声明 in的情况下使用func()
定义的 in 。与定义在哪个需要用关键字声明相反?而且我认为如果在中定义,则可以在外部声明时使用它,即使既不也不包括?header.h
file1.c
file1.c
file1.c
header.h
var
header.h
file1.c
extern
var
file2.c
file1.c
file1.c
file2.c
header.h
如果前面的段落没有意义,我深表歉意,我很难描述一些让我感到困惑的事情。无论如何,如果您能够修复错误或诸如此类,请编辑此内容。
书籍和网页似乎根本没有帮助。他们最终给了我误解,因为我已经不了解某些东西并得出错误的结论,或者他们提出的概念让我更加反感。
我正在寻找我正在寻找的是一个将这一切摆在我面前的答案。例如'this can access this under these conditions'、'this cannot access this'。
解决方案
在一个文件中定义的函数.c
可以使用在另一个.c
文件中定义的任何东西,除了那些标记为static
. 标记为的函数和全局变量static
不能从其他翻译单元访问。
是否在头文件中声明了某些东西并不重要——.c
如果你愿意,你可以在同一个文件中本地声明函数,该文件调用它们。
推荐阅读
- ocaml - 如何摆脱 OCaml 中 int 周围的括号?
- nested - omnet++ 嵌套继续问题 没有这样的文件或目录
- docker - Tensorflow docker,NGC镜像和Docker Hub镜像有什么区别?
- elasticsearch - 如何在流利的配置中使用多进程工作者
- html - 如何使用 Flexbox 创建 Spotify 布局?
- can-bus - 使用带有 CAN_TP 的 UDS 服务通过 CAN 接收一帧 256 字节数据
- amazon-web-services - Aws-Lambda 导出默认功能不起作用
- pci - 外部 PCIe 布线规范的详细信息?
- angular - angular mat-datepicker:选择日期后出错
- bash - 使用 getopts 的 Bash 脚本不接受多个参数