2016-10-09 89 views
4

前方宣言がどのように相互作用するかを把握しようとしています。 typedefされた構造体をとる関数を宣言すると、以前に宣言された(実際には定義されていない)構造体をパラメータとして受け入れるようコンパイラーを得る方法がありますか?C - 構造体と関数の前方宣言

私が働いて持っているコード:

typedef struct{ 
    int year; 
    char make[STR_SIZE]; 
    char model[STR_SIZE]; 
    char color[STR_SIZE]; 
    float engineSize; 
}automobileType; 

void printCarDeets(automobileType *); 

私は私が行うことがしたいこと:

struct automobileType; 
void printCarDeets(automobileType *); 

//Defining both the struct (with typedef) and the function later 

私は本当に基本的な何かが足りないか、どのように理解していないのどちらかだように私は感じますコンパイラは構造体の前方宣言を処理します。

答えて

3

typedefsとstruct namesは異なる名前空間にあります。だからstruct automobileTypeautomobileTypeは同じものではありません。

これを行うには、匿名の構造体にタグ名を付ける必要があります。

あなたの.cファイルの定義:

typedef struct automobileType{ 
    int year; 
    char make[STR_SIZE]; 
    char model[STR_SIZE]; 
    char color[STR_SIZE]; 
    float engineSize; 
}automobileType; 

あなたのヘッダファイルで宣言:Cファイルには、ヘッダーを含める必要があります

typedef struct automobileType automobileType; 
void printCarDeets(automobileType *); 
+1

が、その場合、あなたはおそらくしたくありませんそれにもかかわらず、typedef、C11を繰り返す。ヘッダーは問題ありません。 Cファイルに 'struct automobileType {...};'を定義してください。 –

+0

@JonathanLeffler .hファイルでそれを行うのとは別に、私は最初にそれを動作させたので、私はそれを行うべきですか? –

+2

@ ZacTaylor上記の答えは、宣言と定義が別々のファイルにあるかどうかに関係なく機能します。主な問題は、匿名の構造体を宣言することができないことです。 – dbush

関連する問題