2011-07-21 14 views
1

関数uint32_packを呼び出す次のコードがあります。このプログラムはDev-C++でエラーなくコンパイルされますが、 'tag'が偶数の場合は正しい結果が得られません。 Visual Studioでは、プログラムはコンパイルされますが、エラーが発生します。私は、これらのエラーが「タグ」が偶数の場合に正しい出力を得ない理由を推測しています。私はまだポインタの周りに私の頭を取得しようとしていると私はそれらを宣言するときに間違っていたかわからない。ご協力いただきありがとうございます。ポインタを正しく初期化する方法

1 int uint32_pack (uint8_t *fieldnumber, uint32_t value, uint8_t *out); 
2 int main(){ 
3 uint32_t initvalue = 2; 
4 int return_rv; 
5 uint8_t *tag = (uint8_t *) malloc(sizeof(uint8_t)); 
6 *tag = 38; 
7 uint8_t *tempout= (uint8_t *) malloc(30); 
8 return_rv = uint32_pack (tag, initvalue, tempout); 
9 free(tempout); 
10 free(tag); 
11 } 

そして、VSからの誤差があるが、以下のように:

error C2143: syntax error : missing ';' before 'type' (on line 7) 
error C2065: 'tempout' : undeclared identifier  (on line 8) 
warning C4047: 'function' : 'unsigned char *' differs in levels of indirection from 'int' (on line 8) 
warning C4024: 'uint32_pack' : different types for formal and actual parameter 3 (on line 8) 
error C2065: 'tempout' : undeclared identifier (on line 9) 
warning C4022: 'free' : pointer mismatch for actual parameter 1 (on line 9) 
+5

Cコードとしてコンパイルされている可能性があります.MSVCはC99をサポートしていないため、宣言とコードを混在させることはできません。それをC++コード(.cppの名前を変更するか、IIRC '/ Tp'フラグを使用)としてコンパイルし、それが修正されているかどうか確認してください。 uint32_pack関数のヘルプが必要な場合は、質問に含める必要があります。 – user786653

+0

あなたが正しいかのように見えます。なぜそれを答えとして投稿しないのですか? –

+2

@negeoそしてあなたがそれをしている間、なぜ、なぜ、あなたは1バイトのmallocですか? –

答えて

2

最後の3つのエラーは、第二の帰結であり、エラーはどこから来るここ

コードです最初の結果です。それは最初と3番目の原因を説明することができません。

C89ではなくC++またはC99を使用しているため、最初のエラーが発生します。 C89でコードの後に​​変数を宣言することはできません。

6行目と7行目の順序を逆にしても問題ありません。 (私は3番目のエラーも最初のエラーの結果だと思いますが、それは確定的ではありません)。

1

ここにはいくつかの異なる問題があるかもしれません。これらの整数型を宣言するカスタムヘッダーがない限り、<integer>_t型は標準ヘッダーstdint.hに宣言されています。 Visual Studioにはこのヘッダーが付属していないため、これらの種類はわかりません。 googleの場合は、stdint.hの実装を見つけることができます。

ファイルの拡張子が.cの場合、Visual StudioはデフォルトでファイルをCファイルとしてコンパイルします。また、C99構文もサポートしていないため、実行可能コードの中で変数を宣言することはできません。いずれかの宣言を関数の先頭に移動するか、VSにC++としてファイルをコンパイルするように強制します。後者を行うには、ファイルの名前を変更するか、そうすることができるファイルプロパティにオプションがあります。

関連する問題