は、すべての宣言は(Cで)コンパイル後の関数の先頭に起こるのだろうか?次の例は、私が疑問に思っていることを少し良く示しています。 "ptr1"がうまくいかない場合は、ptr2がNULLに初期化されていると思いますか?範囲内では、すべての宣言はコンパイル後の関数の先頭(C言語)で行われますか?範囲内
int main()
{
int ret = 0;
void * ptr1 = NULL;
if (ret = do_ptr_work(ptr1))
goto done;
void * ptr2 = NULL;
if (ret = do_ptr_work(ptr2))
goto done;
done:
if (ptr1) {
free(ptr1);
ptr1 = NULL;
}
if (ptr2) {
free(ptr2);
ptr2 = NULL;
}
return ret;
}
おかげで、 Chenz
可能な重複:http://stackoverflow.com/questions/2821663/c99-goto-past-initialization – payne
なぜこれを使用する必要がありますか?両方を初期化する場合は、両方の宣言を関数の先頭に移動するのは簡単ではありませんか? – pjc50
合意しました....これは重複しています...ありがとう! (最初の質問に人々を向けるにはどうすればいいですか?) –