みんなへの最初のハロー、ここに最初の投稿。
今日、私はこのコードが正しいかどうか疑問に思いました。それはマイクロコントローラーの友人によって以前に書かれたものであり、私はもう彼に尋ねる機会がありません。
プログラムは正しく動作しますが、運が良かったかどうかを実際に判断することはできません(プログラミングで運が良かったとは思わないでください)。この投稿のタイトルが正しいかどうかさえわかりません。誤解を招く可能性がある場合は申し訳ありません。コード:
char *textStatusErrorMessage( unsigned int codeStatus )
{
switch ( codeStatus ) {
case STATUS_1:
return ( (char *) " Status: 1 " );
break;
case STATUS_2:
return ( (char *) " Status: 2 " );
break;
default:
sprintf( tmpBuf, " UNKNOWN STATUS %03d ", codeStatus );
return ( (char *) tmpBuf ); //tmpBuf is global
break;
}
}
もっと正確に言えば、この構文は私にはちょっとわかりにくいです。
return ( (char *) " Status: 1 " );
何のchar*を返しますか?保存された「ステータス:1」文字列はどこにありますか?ヒープ/スタック???
実装されているため、文字列は関数のスコープ内にあり、returnステートメントを使用して関数を終了した後、関数自体によって返されるポインターに何が書き込まれるかを制御できないと想定しています。
私の見方からすると、可能な文字列オプションが異なるグローバル配列があり、CASEによって選択された正しい配列へのポインタが返されます。したがって、私が返すポインタは、明確に定義されたメモリ領域へのポインタであることがわかります。
それで、このコードは間違っているかどうか?最も正しい解決策はどれですか?
ありがとうDAN