0

我对 C 语言比较陌生,并且边走边学。我遇到困难的一件事是跨多个文件共享数据。我已经在字符数组和整数等简单的事情上使用了 extern。但是当涉及到一种类型时,例如使用 MySQL 的实例呢?IE:

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 包含在那些其他文件中,包括头文件(如果我没有将包含在其他文件的头文件中,即函数。 h和functions.c,当我制作函数原型时,由于未知类型,它在编译时傻眼)。

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

4

2 回答 2

1

实际上,没有。没有更清晰有效的方法了。

但是,有一些选项可用:

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

我建议每次都包含头文件。使用良好的文本编辑器,开销并不大。

顺便说一句,许多其他语言也遵循这种方式。您应该import使用 Java 和 Python。帕斯卡使用uses. 所以大家都觉得没问题。

于 2014-08-26T18:19:49.563 回答
0

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

这使您可以更好地控制连接的范围。不是任何函数都能够 mutate mysql_con,只有您定义的函数才能。

我曾经和一位绅士一起工作,他有一个名为的文件database.h,他将每个变量都保存在其中;不用说他的代码有很多错误和问题。

于 2014-08-26T18:05:22.810 回答