跨多个源文件共享类型-C



我对C和边学习边学习相对较新。有一件事我很难处理,那就是在多个文件之间共享数据。我已经将extern用于简单的事情,如字符数组和整数。但是,当涉及到一种类型时,比如使用MySQL,实例又如何呢?即:

main.c:
#include <mysql.h>
#include <my_global.h>
MYSQL *mysql_con;
main.h:
#include <mysql.h>
#include <my_global.h>
extern MYSQL *mysql_con;

我可以通过其他文件使用mysql_con,只要我在其他文件中包括mysql.h和my_global.h,包括头文件(如果我不在其他文件的头文件中包括include,即functions.h和functions.c,当我制作函数原型时,由于未知类型,它在编译时会发出嘎嘎声)。

我的问题是:有没有办法在任何使用mysql_con的东西中一遍又一遍地包含相同的头?我甚至不得不在main.h中包含mysql的头,只是为了声明extern!有没有更有效的方法可以做到这一点?

事实上,没有比这更清楚、更有效的方法了。

然而,也有一些选择:

  1. .c文件中写入头文件的内容。每次你想使用.c文件时,你可以只在它中写入extern MYSQL *mysql_con;。这需要更多的打字,可能会引入更多的错误不要这样做
  2. 您可以将头文件包含在编译器中。-include my_header.h选项可以做到这一点。如果您有一个命令来构建所有的源文件,那么键入的次数就更少了。不过,我也不建议这样做。原因有两个:
    • 没有人预料到这一点。人们通常不会查看您的构建脚本
    • 您不希望此头文件包含在所有源文件中

我建议每次都包含头文件。有了好的文本编辑器,就不会有太多开销。

顺便说一句,许多其他语言也遵循这种方式。您应该使用Java和Python中的import。Pascal使用uses。所以每个人都认为没问题。

否。这可能是你遇到的问题并不是你真正的问题之一。您不想在文件之间共享全局变量,而是明确地将连接传递给需要它的函数

这使您能够更好地控制连接的范围。与任何能够变异mysql_con的函数不同,只有您定义的函数才能变异。

我曾经和一位先生合作过,他有一个名为database.h的文件,他把每个变量都保存在里面;不用说,他的代码有很多错误和问题。

相关内容

  • 没有找到相关文章

最新更新