質問: 【C言語】【スタック】ローカル変数を戻り値にしても問題ない? --------------------- int test(void) { int b 0; b 1 + 1; return b; }
回答: return による戻り値は、メモリーを介してではなく CPU内のレジスターに記憶され、このレジスターを介して 受け渡しが行なわれるため、ローカル変数は関与しないから問題無い。 レジスターの名前表記は、アセンブラー言語よっても異なる。 ここではレジスターを REG として受け渡しの流れを示すと以下の通り。 ...// return b ; の部分 REG = b ;// b が解放されるのは、この直後。 return ; } ...// a = test() ; の部分 test() ; a = REG ; ... } return は復帰するだけの機能で、それ自体には、 戻り値を受け渡しするような機能は無いってこと。