プログラムでどうしても気になることがあったので質問させていただきます。
既存のプログラムを見て勉強していたのですが、文字列でインデックスの値を
指定しただけのものがありました。
c_buff[sizeof(*)];
*には宣言された変数が入るので[/url]の中は数値になります。
char c_buff[128];
で宣言されており、文字列のある場所を指定したのだろうと推測できるのですが
文字を代入するわけでもなく";"で終わっています。
まったく意味のないコードではないかと思っているのですが、何か意味があるのではないかと気になっています。
PGを長くしていると、文字列のインデックスを指定しただけのコードに何か意味を持たせたりするのでしょうか?
文字列のインデクスを指定しただけ
Re:文字列のインデクスを指定しただけ
どこの部分のソースコードでしょうか?
みんながみんなソースコードを暗記しているわけではないので、サイトのどの部分か書いてもらわないと応えられないんですよ。サイトへのリンクを書いてもらうのが一番ですね。
char c_buff[128];
だけの情報では、128文字分のc_buff配列が宣言されているとしか分かりません。
みんながみんなソースコードを暗記しているわけではないので、サイトのどの部分か書いてもらわないと応えられないんですよ。サイトへのリンクを書いてもらうのが一番ですね。
char c_buff[128];
だけの情報では、128文字分のc_buff配列が宣言されているとしか分かりません。
Re:文字列のインデクスを指定しただけ
解釈1 keiさんの勘違い
宣言と同時に代入をしなくてはならないと勘違いされているわけではないですよね?
c_buffがどこかで使われていませんか?
解釈2 おまじない
char dummy[1024]; /* この変数を削除すると異常動作するので、絶対に削除しないこと! */
幸い私は遭遇したことがありませんが、このようなコメントが存在するらしいです。
全く使っていない変数の有無が動作に影響を及ぼすことがあります。
一般にはこのような場合は、たまたま正常に動いているだけと評価され
デバッグされるべきですが、何らかの事情によってごまかしているわけです。
宣言と同時に代入をしなくてはならないと勘違いされているわけではないですよね?
c_buffがどこかで使われていませんか?
解釈2 おまじない
char dummy[1024]; /* この変数を削除すると異常動作するので、絶対に削除しないこと! */
幸い私は遭遇したことがありませんが、このようなコメントが存在するらしいです。
全く使っていない変数の有無が動作に影響を及ぼすことがあります。
一般にはこのような場合は、たまたま正常に動いているだけと評価され
デバッグされるべきですが、何らかの事情によってごまかしているわけです。
Re:文字列のインデクスを指定しただけ
> 幸い私は遭遇したことがありませんが、このようなコメントが存在するらしいです。
よくある話です。
ほかには、printfデバッグのために入れていたprintfを取り除くとRelease版で誤動作するので削除不可とか。
(printfがOutputDebugStringとか、他の関数の場合もあり)
そんなコードを書いた連中は、「だから最適化は怖い」とか、わかったようなことを自信満々で主張し、挙句、その間違った解釈をもとにコーディング規約を作ってみたりします。
よくある話です。
ほかには、printfデバッグのために入れていたprintfを取り除くとRelease版で誤動作するので削除不可とか。
(printfがOutputDebugStringとか、他の関数の場合もあり)
そんなコードを書いた連中は、「だから最適化は怖い」とか、わかったようなことを自信満々で主張し、挙句、その間違った解釈をもとにコーディング規約を作ってみたりします。
Re:文字列のインデクスを指定しただけ
配列のサイズが想定内であるかわざと配列の要素を参照していて、
もし想定外ならばメモリの不正参照となってアプリケーションエラーとなることを
期待しているのではないでしょうか。
要するに保険です。
当然、不正参照でもエラーにならない可能性はありますが。
もし想定外ならばメモリの不正参照となってアプリケーションエラーとなることを
期待しているのではないでしょうか。
要するに保険です。
当然、不正参照でもエラーにならない可能性はありますが。