現在、私はCプロジェクトで作業しています。コードを整理しておくためにインクルードファイルを使用しています。 1つのファイルincludes.h
にはtypedef
があり、別のインクルードファイルutil.h/util.c
にアクセスすることはできません。私はmain.c
の両方に次の順序で含めました:includes.h
util.h
。C - typedefのインクルードファイル
main.c
:
#include <stdio.h>
#include <stdlib.h>
//similar includes
#include "includes.h"
#include "util.h"
int main()
{
MyStructType somename;
somename.number = 5;
util_foo(somename);
return 0;
}
includes.h
:
#pragma once
struct structname
{
int number;
};
typedef struct structname MyStructType;
util.h
:
#pragma once
#include "includes.h" //added line (>accepted answer)
int util_foo(MyStructType blabla);
util.c
:
#include <stdio.h>
#include "util.h"
int util_foo(MyStructType blabla)
{
printf("%d\n", blabla.number);
return 0;
}
私は、このコマンドでコンパイルします。gcc -o main *.c
しかし、これはコンパイルされません、あなたはこれが動作しない理由を任意のアイデアを持っていますか?または、プロジェクトの構造を完全に変更せずに修正する方法は?
編集: 持つ#pragma once
交換することをお勧めします。あなたはあなたのコードのコンパイルを行うためにutil.h
で
#include "includes.h"
を追加する必要が
#ifndef STH_SIMILAR_TO_FILENAME
#define STH_SIMILAR_TO_FILENAME
//code
#endif
コンパイラのエラーに関する質問には常に完全なエラーメッセージが含まれている必要があります。 – user694733
次回はそれは明白なエラーではないので必要ではないと思っていたが、システムを後ろから取り戻すのは間違っている。 – Zonko
個人的に、私は '#pragma once'が好きではありません。それは非標準であり、深刻でIMOの致命的な欠陥が1つあります。 http://stackoverflow.com/questions/787533/is-pragma-once-a-safe-include-guard –