次の(c)コードでエラーが見つからない場合があります。しかし、コンパイラは私にエラーを投げています。共用体を使用しているときに.cインクルードファイルの複数のエラー
これは、私はエラーが含まれたファイル内にあると確信している
のコードFloatConverter.c
1 #ifndef FloatConverterh
2 #define FloatConverterh
3
4 #include "FloatConverter.h"
5 #include <stdint.h>
6
7 #define MAXVALUE 6000
8 union Cast
9 {
10 double d;
11 long l;
12 };
13
14 int32_t float2int(double d)
15 {
16 static volatile Cast cast;
17
18 cast.d = d + 6755399441055744.0;
19 return cast.l;
20 }
21
22 // naive
23 int32_t f32ToInt16Digits(float f32)
24 {
25 return ((int32_t)(f32 * 2 * MAXVALUE/65535)));
26 };
27
28 // improved
29 int32_t f32ToInt16Digits2(float f32)
30 {
31 return (float2int(f32 * 2 * MAXVALUE/65535));
32 };
33
34 #endif
FloatConverter.h
extern int32_t f32ToInt16Digits(float f32);
extern int32_t f32ToInt16Digits2(float f32);
です。私がそれを取り除くと(そしてすべての参考文献)、すべてが正常で罰金に戻ります。
これは、コンパイラによって出しているエラーです:FloatConverter.c
でFloatConverter.hで
expected '=', ',', ';', 'asm' or '__attribute__' before 'cast' 16
'cast' undeclared (first use in this function) 16
expected ';' before ')' token 25
expected statement before')' token 25
:
expected '=', ',', ';', 'asm' or '__attribute__' before 'f32ToInt16Digits' 1
expected '=', ',', ';', 'asm' or '__attribute__' before 'f32ToInt16Digits2' 2
私はすべてのヒントのために感謝しています。
なぜ関数定義の後にセミコロンがありますか?また、* FloatConverter.h *の内容全体は?インクルージョンガードを使用しないでください。なぜ実装ファイルにガードが含まれていますか? –
関数定義の後のセミコロンは実験であったので、私は誰も傷つけていません。はい、ファイル全体です。インクルードロックが間違っていますが、これはエラーの原因ではありません(テスト済み)。 – anyone