- 1 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 11:02:46 ]
- スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。
スレを勃てるまでもないC/C++の質問はここで pc11.2ch.net/test/read.cgi/tech/1167476845/
- 200 名前:デフォルトの名無しさん mailto:sage [2007/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 mailto:sage [2007/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] ; と直に書いても、悪くない。
|

|