K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>tiと申します。 >自分の勉強のため回答させていただきますので、 >前橋さん間違いや補足のご指摘お願いします。 > >main.cの中で >>#include "File1.h" >>#include "File2.h" > >となっていて、 >>static KOUZOU1 *func(); >>static KOUZOU2 *func(); /* ここがエラーになります:error: conflicting types for 'func' */ >で 展開後にfunc識別子が重複していることが原因です。 >どちらかと関係するところを変えればコンパイルできるはずです。 > >なお、static宣言はmain.cなど、公開したくないソースに対してのヘッダファイルに >含めるべきでないと思います。 >公開用(extern宣言の関数)と非公開用(ある関数だけで使うstatic宣言の関数)で >ヘッダファイルは分けるべきです。 > >また、ヘッダファイルは二重展開防止機能をつけておきましょう。 > >#ifndef FILE1_H >#define FILE1_H >~ >#endif > >以上 >>お返事遅れました。 >>(ぱ)さん、yuyaさん、ありがとうございます。 >>(ぱ)さんの回答にひもづけて続けます。 >> >>下記がサンプルコードとエラーメッセージです。 >>(環境はMac OSXのXcode3.2.4です。) >> >>main.c >>-------------------------------------------------- >>#include "File1.h" >>#include "File2.h" >> >>int main (int argc, const char * argv[]) { >> >> file1(); >> file2(); >> >> return 0; >>} >>-------------------------------------------------- >> >>File1.h >>-------------------------------------------------- >>typedef struct KOUZOU1_tag { >> int var; >>} KOUZOU1; >> >>void file1(); >>static KOUZOU1 *func(); >>-------------------------------------------------- >> >>File1.c >>-------------------------------------------------- >>#include <stdio.h> >>#include <stdlib.h> >>#include "File1.h" >> >>void file1() { >> KOUZOU1 *kouzou; >> kouzou = func(); >> >> printf("%d\n", kouzou->var); >>} >> >>static KOUZOU1 *func() { >> KOUZOU1 *kouzou; >> >> kouzou = malloc(sizeof(KOUZOU1)); >> kouzou->var = 1; >> >> return kouzou; >>} >>-------------------------------------------------- >> >>File2.h >>-------------------------------------------------- >>typedef struct KOUZOU2_tag { >> int var; >>} KOUZOU2; >> >>void file2(); >>static KOUZOU2 *func(); /* ここがエラーになります:error: conflicting types for 'func' */ >>-------------------------------------------------- >> >>File2.c >>-------------------------------------------------- >>#include <stdio.h> >>#include <stdlib.h> >>#include "File2.h" >> >>void file2() { >> KOUZOU2 *kouzou; >> kouzou = func(); >> >> printf("%d\n", kouzou->var); >>} >> >>static KOUZOU2 *func() { >> KOUZOU2 *kouzou; >> >> kouzou = malloc(sizeof(KOUZOU2)); >> kouzou->var = 2; >> >> return kouzou; >>} >>-------------------------------------------------- >> >>エラーは >>error: conflicting types for 'func' >>というもので >>File2.h の static KOUZOU2 *func(); >>の所に出ます。 >> >>ちなみに >>error: previous declaration of 'func' was here >>というメッセージも同時に出て、開くと >>File1.h の static KOUZOU1 *func(); >>を指していました。 >> >>やっぱりstaticを付けているのに >>「funcさっき宣言したじゃん!」と言われているようなんですが、 >>いかがでしょうか。 >> >>うーん、どこを勘違いしてるんだろうか。。。 >> >>よろしくお願いします! >> >>P.S. >>「記憶クラス指定子」「型修飾子」の違いなど、 >>自分で間違えて指摘されるとスムーズに理解しやすいですね。 >>本で読むときはつい飛ばしてしまいがちですが(笑
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!