首页 > 解决方案 > C 中的链接文件可以使用和不可以使用什么?

问题描述

最近,我一直在尝试将不透明指针作为一个编程概念来工作,而我遇到的主要困难之一是弄清楚什么是其他文件可用或不可用。在上一个问题中,我未能尝试创建指向结构的不透明指针,即使答案解释了如何解决该问题,我仍然不太明白我哪里出错了。

我认为如果在 中定义了一个结构,如果两个文件都包含其中包含该结构的声明,file2.c则可以使用它吗?这对我来说并不完全有意义。两个文件都使用,所以我可以看到他们将如何访问其中的内容,但我不明白他们将如何使用它来相互访问。file1.cheader.hheader.h

当我开始编程时,我认为这很简单,你有程序文件,它们不能相互访问任何东西,这些程序文件可以#include 带有定义和声明的头文件(例如file1.c可以访问变量/functions/etc. 中定义header.h)。事实证明我错了,事情要复杂得多。

因此,据我所知,如果包含,则可以在不声明 in的情况下使用func()定义的 in 。与定义在哪个需要用关键字声明相反?而且我认为如果在中定义,则可以在外部声明时使用它,即使既不也不包括?header.hfile1.cfile1.cfile1.cheader.hvarheader.hfile1.cexternvarfile2.cfile1.cfile1.cfile2.cheader.h

如果前面的段落没有意义,我深表歉意,我很难描述一些让我感到困惑的事情。无论如何,如果您能够修复错误或诸如此类,请编辑此内容。

书籍和网页似乎根本没有帮助。他们最终给了我误解,因为我已经不了解某些东西并得出错误的结论,或者他们提出的概念让我更加反感。

我正在寻找我正在寻找的是一个将这一切摆在我面前的答案。例如'this can access this under these conditions''this cannot access this'

标签: cscopelinkerdeclaration

解决方案


在一个文件中定义的函数.c可以使用在另一个.c文件中定义的任何东西,除了那些标记为static. 标记为的函数和全局变量static不能从其他翻译单元访问。

是否在头文件中声明了某些东西并不重要——.c如果你愿意,你可以在同一个文件中本地声明函数,该文件调用它们。


推荐阅读