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

时间:2014-08-26 17:56:48

标签: mysql c gcc cc

我是C的新手并且在我学习的过程中学习。我遇到的一件事就是在多个文件之间共享数据。我已经使用了简单的东西,如字符数组和整数。但是当涉及到某种类型的实例时,例如使用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,当我创建函数原型时,由于未知的类型,它在编译时发出g。声。)

我的问题是:有什么方法可以在任何事情和所有将要使用mysql_con的内容中反复包含相同的标题?我甚至不得不在main.h中包含mysql的头文件,只是为了声明extern!有没有更有效的方法呢?

2 个答案:

答案 0 :(得分:0)

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

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

我曾与一位名叫database.h的文件的绅士一起工作过,他保留了每一个变量;不用说他的代码有很多错误和问题。

答案 1 :(得分:0)

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

但是,有一些选择:

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

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

相关问题