スレを勃てるまでもないC/C++の質問はここで 2
at TECH
[
2ch
|
▼Menu
]
■コピペモード
□
スレを通常表示
□
オプションモード
□このスレッドのURL
■項目テキスト
200:デフォルトの名無しさん 07/06/08 08:01:35 >>188 マジックナンバーを使わないというのは、 たとえば、 for(a=0; a<26; a++) { ならば、 for(a=0; a< ('Z'-'A'+1); a++) { と書いたほうがいい。 AからZまでの文字数は変ることはないので、 for(a=0; a<26; a++) { /* AからZまでは26文字*/ これでも十分だけどね。 意味としては AからZまで(Zを含む)走査するということなので、 for(a='A'-'A' ; a<='Z'-'A'; a++) { と書いたほうが、意味がわかりやすいけど、ごちゃごちゃしてしまうね。 このプログラムの場合、26ならば簡単に見当がついて誤解もないだろうれど、 65は、すぐにはわからない。 if( s[a] == b+65 ) は、 if( s[a] == b+'A' ) と書いたほうがいい。 数字を直に書くと、他の人にわからないだけではなく、 時間がたつと、書いた本人でさえもわからなくなってしまうから。 (続く) 201:200 07/06/08 08:18:24 (続き) 配列の大きさは、後から変更することもあるため、直接数字を使うのは避ける。 というのも、複数箇所を漏れ無く変更するのは面倒だしミスしやすい。 たとえば、 #define TEXT_IN_BUFFER 256 としておき、 char s[TEXT_IN_BUFFER] ; fgets(s,TEXT_IN_BUFFER,fp); for( a=0 ; a<TEXT_IN_BUFFER ; a++ ){ のようにする・・・というのは昔から本に書かれているけれども、 最近のCコンパイラならば、もっと良い方法がある。 配列宣言にはスコープがあるけれども、 マクロにはスコープがないので、 const int TEXT_IN_BUFFER 256 ; char s[TEXT_IN_BUFFER] ; のようにする。 しかしそれではやはり煩雑だし、 TEXT_IN_BUFFERとsが生き別れになる事故もあるので、 #define SIZE_OF_ARRAY(x) (sizeof(x)/sizeof(x[0])) としておき、 const int TEXT_IN_BUFFER 256 ; char s[TEXT_IN_BUFFER] ; fgets(s,SIZE_OF_ARRAY(s),fp); for( a=0 ; a<SIZE_OF_ARRAY(s) ; a++ ){ のようにする。 この場合は、TEXT_IN_BUFFERを、ローカルスコープにするのであれば、 char s[256] ; と直に書いても、悪くない。
次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
レスジャンプ
mixiチェック!
Twitterに投稿
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch
4311日前に更新/282 KB
担当:undef