2017-11-13 7 views
1

このプロジェクトにアクセスできます。これはKeilμvision5でコンパイルされています。プロジェクトをコンパイルするときにエラーはありません。しかし、私がヘッダファイルにアクセスすると、s8変数に次のエラーがあるというエラーが表示されます。エラー:不明な型名 's8'Keilμvision5ヘッダファイルにエラーが表示されますが、問題なくコンパイルされます。

typedef struct 
    { 
     s8 str[PARAM_TEXT_SIZE]; 
    } 
    text_struct; 

変数は、以下のように定義されます。

typedef char s8; 

私はコンパイラを誤って構成している、またはこのエラーはコンパイル後に無視されている理由だろうか。

PS:これは私の最初の質問StackOverflowサイトです。申し訳ありませんが私の質問が明確でないか間違って配置されている場合。

+2

と?これらのファイルはどのファイルにありますか? 's8'は標準ではありません。加えて、 'char'を符号なし8にすることは非常に悪い考えです。あなたがするべきことは(1999年以来) 'stdint.h'を使うことであり、いくつかの自家製のジャンクタイプではありません。 – Lundin

+0

@ Lundin '(1999年以降) - >今年から、クロスコンパイラのプロバイダが21世紀を実現することは事実です。 * 198Xで叫ぶ*。 (とにかくARMコンパイラは最新です) – Tim

+0

こんにちは@Lundin、私はこのコードを持っていると言っています。通常、私はあなたが 'stdint.h'と言ったように使います。しかし、これは大きなコード(100k以上のコード行)であり、この変数はコードで広く使用されています。これはアームマイクロコントローラの 'typedef_arm.h'ファイルで定義されています。また、マイクロコントローラのバイナリ計算にとって重要なので、符号付き変数として定義されます。 –

答えて

0

s8はヘッダで定義されている場合、のはfoo.hを言わせて、text_structが他のヘッダで定義されているあなた、bar.hそれを呼び出すbar.hを含むファイルは、最初のfoo.hが含まれている場合、それは完全にコンパイルされます。しかし、それはきれいではありません、通常、そのような前提条件に頼らないことが良い習慣です。

ここでは非常に単純な例です:

がfoo.h

typedef int myType; 

bar.h

typedef struct { 
    myType x; 
} myStruct; 

main.cの

#include <stdio.h> 
#include <stdlib.h> 
#include <stdint.h> 

#include "foo.h" 
#include "bar.h" 

myStruct y; 

int main(void) { 
    return 0; 
} 

これは問題なくコンパイルされますが、bar.hが静的​​に評価された場合、myTypeはここでは認識されないため、エラーが発生します。 bar.hが含まれていて、foo.hが含まれていない場合は、コンパイルエラーが発生します。ここでは例です:

error.c

#include "bar.h" 

myStruct z; 

gcc -I. error.c -o error.o

In file included from error.c:1:0: bar.h:2:5: error: unknown type name 'myType' myType x;

変数を定義
+0

こんにちは@TimF、私はあなたの答えをありがとう!しかし、私は言及を忘れてしまった、ヘッダファイルの宣言はこのようなものです: '_PARAM_H' ' #ifndefのに#define _PARAM_H' '、 '#endif' 私はそう宣言のこのタイプに精通していないですがcode'だから私はここでヘッダーファイルを宣言することが許されているかどうかわからない。 –

+0

はい。この 'PARAM_H'はあなたのヘッダを複数回インクルードするのを防ぐだけのガードです。各ヘッダの上に置くのが標準です。ヘッダー+ Hの大文字の名前が必要です。私の例では、それは '_FOO_H'と' _BAR_H'です。 [WikipediaのInclude Guard](https://en.wikipedia.org/wiki/Include_guard)を参照してください。 私の答えが役に立ったら、それをアップヴォートして受け入れてください。ところでStackOverflowへようこそ! – Tim

+0

ありがとう@TimF!私のためにうまくいった。暖かい歓迎ありがとう! :) –

関連する問題