2012-08-14 28 views
4

這是這種情況。在文件「fileA.c」我有如何在ansi-c中使用指向全局結構的指針?

typedef struct MY_STRUCT 
{ 
    int A; 
    int B; 
    int C; 
}MY_STRUCT; 

MY_STRUCT Data; 

/* Function */ 
int function(MY_STRUCT *params) 
{ 
    int varA, varB, varC; 

    varA = params->A; 
    varB = params->B; 
    varC = params->C; 
} 

,我需要填補其他常規的結構要素,例如,「fileB.c」,它包含以下內容:

extern MY_STRUCT Data; 

int function(MY_STRUCT *params); 

/* Function */ 
void userMain(void) 
{ 
    Data.A = 1254; 
    Data.B = 5426; 
    Data.C = 1236; 

    function(&Data); 
} 

但我發現了錯誤:

「[錯誤] fileB.c E208:語法錯誤 - 令牌‘數據‘

’之前插入’和我磨片交叉探測錯誤的編譯器把我的聲明「EXTER n MY_STRUCT數據;「

所以我的問題是如何完成此功能?我的意思是,如何在另一個文件中填充另一個函數的結構元素,這與另一個文件中聲明結構的文件不同?

回答

0

在闡述@ pb2q回答一下:

創建一個filea.h文件(省略了定義和東西):

struct MY_STRUCT 
{ 
(blah blah blah ...) 
}; 

extern MY_STRUCT Data; 

這將申報結構,並告訴誰想知道該變量在另一個文件中聲明。然後在filea.c中放入以下行

#include "filea.h"  // near the top 
(...) 
MY_STRUCT Data; // Somewhere meaningful 

這實際上會聲明變量Data。最後,在文件「fileb.c」中輸入

#include "filea.h" 

它允許你使用變量Data。

+0

謝謝你就是這樣! – m4l490n 2012-08-14 20:30:17

5

當編譯器在編譯fileB.c,它不知道你已經在fileA.c定義的typedef。所以在fileB.c中,MY_STRUCT是一個未知的類型。

您應該將typedef移動到一個通用標題,並將其包含在fileA.c和fileB.c中。

+0

謝謝,解決了這個問題 – m4l490n 2012-08-14 20:30:42