我是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!有没有更有效的方法呢?
答案 0 :(得分:0)
没有。这可能是您遇到的问题并非真正存在问题的情况之一。您不希望在文件中共享全局变量,而是明确地将连接传递给需要它的函数。
这使您可以更好地控制连接的范围。而不是任何函数能够变异mysql_con
,只有您定义的函数才能。
我曾与一位名叫database.h
的文件的绅士一起工作过,他保留了每一个变量;不用说他的代码有很多错误和问题。
答案 1 :(得分:0)
实际上,没有。没有更清晰有效的方法。
但是,有一些选择:
.c
文件中写入标题文件的内容。您每次要使用extern MYSQL *mysql_con;
文件时,都可以在.c
文件中写下-include my_header.h
。这是更多的打字,可能会引入更多的错误。 不要这样做。import
选项可以做到这一点。如果您有一个命令来构建所有源文件,那么输入就更少了。但是,我也不建议这样做。有两个原因:
我建议每次都包含头文件。好的文本编辑器没有太大的开销。
顺便说一下,许多其他语言也遵循这种方式。你应该在Java和Python中uses
。 Pascal使用{{1}}。所以每个人都认为没问题。