gpt4 book ai didi

C - 在单独的文件中包含变量(结构)声明和函数

转载 作者:行者123 更新时间:2023-11-30 15:46:47 25 4
gpt4 key购买 nike

我正在开发一个 C 项目,其中部分代码是由不同的应用程序生成的。单独的文件将包含以下内容:

  • 类型定义、main() 和其他函数
  • 变量声明(其类型定义位于上面的文件中)和使用这些变量的函数

如上所述,第二个文件中的信息是由不同的程序生成的,但它使用主文件中的类型声明。同样,主程序使用第二个文件中定义的变量和函数。

我尝试过使用“include”和“extern”语句,但不太成功。由于这两个文件正在相互获取信息,因此将它们分成三个文件会更有用吗?

1) 类型定义

2)变量声明(使用文件1中定义的类型)和相关函数

3) Main() 和使用上述两个文件的其余函数

如果这是要走的路,它将如何运作?它会使用 include 还是 extern,以及我需要如何使用这些子句?

非常感谢您提供的任何帮助。谢谢!

最佳答案

您建议的布局没有任何问题。也许对 extern#include 的作用进行一些澄清会有所帮助。1) #include 是一个预处理器指令,其本质上是说:“获取指定文件并假装将其粘贴到该指令的位置”

2) extern 是 C 保留字。不要涉及太多技术细节,但其含义是:“此语句中命名的变量是在不同的位置定义的”。变量的空间由编译器保留一次,因此如果函数需要访问相关变量,则在编译器看到定义之前需要一些信息。 extern 声明具有足够的信息供函数使用变量,并且链接器确保在稍后阶段使用正确的变量。

因此,在您的场景中,具有类型定义的文件将在引用这些类型的每个文件中进行 #include 处理。如果您想将所有变量定义收集在一个文件中,该文件将与项目的其他部分分开编译,则任何使用这些变量并将单独编译的文件都需要提供 extern在别处定义的每个变量的声明。请注意,如果您只是将变量定义包含在文件中,编译器将看到该定义两次(首先在包含定义的文件中,然后在包含它的文件中),并假设您尝试将每个变量定义两次,并会发出错误。

最后,这是一个简单的场景(它没有真正意义,而且风格很糟糕):

a.c---------

#include "t.h"

mytype a;
mytype b;

int f( int x, int y ) {

return (x + y)*a - b;

}

m.c---------

#include <stdio.h> // for stdout
#include "t.h"
#include "v.h"

int main () {

fprintf( stdout, "%d", a + b - f(1, 2) );

return 0;

}

t.h------------

typedef int mytype;

v.h----------

#include "t.h"

extern mytype a, b;

int f( int, int );

v.h 和 t.h 可以组合(这是风格和项目要求的问题)。请注意,v.h 中的 f 声明前面有一个隐含的 extern。

关于C - 在单独的文件中包含变量(结构)声明和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18026771/

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