ちょっとしたバグのようなものがあったので、ご報告まで。Open SSH/H8 writerで公開されているソースコードです。
h8write.cで発生するWindowsならではのバグめいたもの
コメントを残す
ちょっとしたバグのようなものがあったので、ご報告まで。Open SSH/H8 writerで公開されているソースコードです。
H8マイコン用のプログラムとして、ビット演算をしているときに見つけました。環境は、windowsの上でcygwinを動かしていて、コンパイラはgcc4.3.4(20090894)とかいうやつです。
ちょっとした小言というか、潔癖症だからこそ気になった点です。同級生のソースコードを眺めていて発見しました。
操作したいビットに1を立てた定数を用いるべき
ひとことで、このようになるでしょうか。ソースコードを見れば一発です。
main(){
char a = 0x87; /* 1000 0111 */
a |= 0x48; /* 0x00 x000 を1にしたい時 */
// a &= 0x78; /* x000 0xxx を0にしたい時はこう書かずに、 */
a &= ~0x87; /* こう書いて欲しい */
}
どのビットを操作する演算なのかを明確にするためにも、後者を使って欲しいものです。
#include <stdio.h>
#define N 300
main(){
int i;
for(i = 0; i < N; i++){
#if 0
printf("%d\n", i);
/* middle comment
printf("%d\n", i * 10);
printf("%d\n", i * 100); // small comment
*/
#endif
}
}
大コメントが非常に便利ですね。0を1に書き換えるだけで、コメントから脱出させることができます。私も良く使います。
今まで知らずに生きてきたので、恥さらしも含めてまとめておきます。結論から言うと、当たり前のことですが構造体のサイズはsizeof()を使って取得しましょう(サイズを定数で記述しないこと)。
C言語を初めて間もないとき、ポインタの学習でひとつ勘違いをしていたことがあったので、懐かしい気分に浸りながら、思い出しつつ書き記していこうと思います。
環境依存の話も含まれているので、そこに関しては注意してください。
この前、C言語でマイナスの剰余をしていて引っかかったことがあったのでメモ。