0

I'm relatively new to C and learning as I go. One thing I'm having a hard time with is sharing data across multiple files. I've got the use of extern down with simple things such as character arrays and integers. But what of an instance when it comes to a type, such as using MySQL? i.e.:

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;

I am able to use mysql_con via other files - so long as I include the mysql.h and my_global.h IN those other files, headers included (if I don't put the include in the header files for other files, i.e. functions.h and functions.c, it gawks at compile time due to unknown types when I make the function prototype).

My question is: is there a way around having to include the same headers over and over and over again in anything and everything that's going to use mysql_con ? I even had to include the headers for mysql in the main.h just to declare the extern! Is there are more efficient way of doing this?

4

2 に答える 2

1

実は違う。これほど明確で効率的な方法はありません。

ただし、利用可能なオプションがいくつかあります。

  1. ヘッダー ファイルの内容をファイルに書き込み.cます。使用するたびにファイルにextern MYSQL *mysql_con;書き込むことができます。.cこれはより多くのタイピングであり、より多くのエラーが発生する可能性があります。これをしないでください
  2. ヘッダー ファイルをコンパイラに含めることができます。-include my_header.hオプションはそれを行います。すべてのソース ファイルをビルドするためのコマンドが 1 つあれば、入力する手間が省けます。ただし、それもお勧めしません。2 つの理由があります。
    • 誰もこれを期待していません。通常、人々はビルド スクリプトを見ません。
    • このヘッダー ファイルをすべてのソース ファイルに含めたくありません。

毎回ヘッダーファイルを含めることをお勧めします。オーバーヘッドの少ない優れたテキスト エディター。

ちなみに、他の多くの言語もこの方法に従っています。importJava と Python で行う必要があります。パスカルはuses. だから大丈夫ってみんな思ってる。

于 2014-08-26T18:19:49.563 に答える
0

いいえ。これはおそらく、あなたが抱えている問題が実際にはあなたの問題ではないケースの 1 つです。ファイル間でグローバル変数を共有するのではなく、それを必要とする関数に接続を明示的に渡します。

これにより、接続のスコープをより詳細に制御できます。どの関数も mutate できるのではmysql_conなく、定義した関数だけができるようになります。

database.h私はかつて、すべての変数を保持する名前のファイルを持っている紳士と仕事をしました。言うまでもなく、彼のコードには多くのバグや問題がありました。

于 2014-08-26T18:05:22.810 に答える