2

プログラムの c ファイル全体でグローバル変数と 3 つの構造体を共有するのに大きな問題があります。

表示される 2 つの通常のエラーは次のとおりです。

variable_name の未定義参照

variable_name の前に '='、','、'%3b'、'asm'、または '<strong>attribute' が必要です。

私がやろうとしていることは次のとおりです。

variables.h と variables.c でグローバル変数を定義します。

関数を file1.h、file2.h などと定義します。

お気に入り :

file1.h :

#ifndef FILE1_H
#define FILE1_H

void function_file1(void);

#endif

file1.c :

#include "file1.h"

void function_file1(void) {
//do sth
}

グローバル変数と構造体を variables.h で extern として定義し、変数.c で extern キーワードを使用せずに再度定義します。

しかし、それを何度も繰り返した後、上記の 2 つのエラーが発生し続けます。不足しているものはありますか?

ここに私がやったことについての詳細があります:

変数.h:

#ifndef VARIABLES_H
#define VARIABLES_H


extern int x;
extern int y;
extern int foo = 3; // i have set value to 3 variables with extern like the foo one


    /*Tooltips  */
struct test_struct {
/* variables 
*/

} test;

extern struct test_struct test;

#endif

functions.h:

#ifndef FUNCTIONS_H
#define FUNCTIONS_H

#include "variables.h"

void do_sth(void) { 
//do sth
}

#endif

main.c

/* including libraries before including variables.h and functions.h */
#include "variables.h"
#include "functions.h"

........

これはプログラムの基本構造です。グローバル変数を含む単一の variables.h ファイルがあります。プログラムの関数をいくつか含む約 7 つの functions.h のようなファイルがあります。この構造では、コンパイラは何も表示しません。エラー。

問題は、プログラムにあるすべての .h ファイルに対して .c ファイルを作成するにはどうすればよいかということです。variables.h と variables.c と functions.h と functions.c のように?

4

1 に答える 1

0

まず、変数と関数自体を分離することが本当に意味があるかどうかを再考してください。

一般に、いくつかのバリアベルといくつかの関数の間には関係があります。このような関係に従うと、グループ化がより理にかなっている可能性があります。

変数とそれらに作用する関数をグループ化します。

とにかく質問に戻ると、変数を定義して宣言する方法は次のようになります。

変数.h:

#ifndef VARIABLES_H
#define VARIABLES_H

extern int x;
extern int y;
extern int foo;

struct test_struct {
/* variables 
*/

};

extern struct test_struct test;

#endif

変数.c:

#include "variables.h"    

int x;
int y;
int foo = 3; // i have set value to 3 variables with extern like the foo one


struct test_struct test;

...

外部を利用する任意のモジュールにインクルードvariables.hし、後でリンカvariables.oが からコンパイルされたものを追加できるようにしvariables.cます。

于 2012-06-26T08:22:19.730 に答える