2011-12-24 8 views
0

C言語で書かれたC++のコードを特定のプラットフォーム用にコンパイルする必要があります。以下のように出力データの先頭にpを設定しようとしている下の行に問題があります。C++コードをCに変換する際の問題 - 配列の先頭を指す

コンパイルエラーが発生するC2143:構文エラー: ';'が見つかりません。 'タイプ'の前に

これをC言語でコンパイルするにはどのように変更する必要がありますか?

size_t example_function(unsigned char** outputdata, size_t *output_length) 
{ 
    *outputdata = (unsigned char*)malloc(20); 

    unsigned char* p = *outputdata; 

    return 0; 
} 
+0

エラーが発生するのは、どのラインですか?私はこれで何か間違っているのを見るのに苦労している。 –

+0

コードは正しくコンパイルされています。エラーも警告もありません。ちょっとしたコード(関数の前後)、特にコンパイラやオプションを使用していますか? – Adonais

+0

'size_t'がありませんか? '#include ' – Mat

答えて

4

私はあなたがこれをコンパイルするには、Visual C++コンパイラを使用していることを推測しています。このコンパイラはC90(別名C89)のみをサポートしているため、他のステートメントよりも前に宣言を置く必要があります。

size_t example_function(unsigned char** outputdata, size_t *output_length) 
{ 
    unsigned char* p; 

    *outputdata = malloc(20); 

    p = *outputdata; 

    return 0; 
} 

私は、そうでなければ、おそらく別のエラーを持っているでしょうあなたが(直接的または間接的に)size_tmallocの定義について<stdlib.h>が含まれていると仮定しています。

+0

C99は、元のコードと同じように宣言を許可します。あなたの答えはおそらくまだ正しいです。 'p'は決して使用されないので、どうしてもそこにいるのはどうしてですか? –

+0

@CarlNorum:私はC2143がMicrosoftのコンパイラエラーであると仮定しました。その仮定が正しければ、残りの答えは正しいはずです。 re: 'p'は未使用ですが、わかりません。私は書かれたとおりにコードを修正していました。 –

+0

C99を話すMSコンパイラはありませんか?それにもかかわらず、C99は元のポスターの例のような宣言を明示的にサポートしています。私はあなたの答えはおそらく正しいことに同意します - それはC99/C90がそれらを記述するのと同じではないということだけです。 –

関連する問題