しゃけなべいびー雑多

シャケについて真剣に語ります(嘘)

プログラミング備忘録

C言語 if文の条件処理順番

おはようございます。こんにちは、こんばんは。 もう、11月も7日になるとは。早いものです。 静的解析ツールなどを使用すると、if文の条件式などでよく警告が出るので解除しようといじるのですが、いじってバグを出した人がいたので備忘録。 if ( a && b …

C言語 グローバル変数のstaticをはずしてみた

こんにちは、こんばんは、おはようございます。 自分も短絡的な思考をしないようにと戒め。 グローバル変数のstaticをはずして他ファイルから参照を試みた人がいたので。 通常、公開する必要がない変数なのでstaticを付けているのだが。 そもそも短絡的にsta…

C言語 グローバル変数に気をつけよう

おはようございます。こんばんは。こんにちは。 最近、なぜかビット演算しているのに値がたまに変わらなーい。って、騒いでいた若手がいたので、原因を備忘録。 原因は、割り込み中とメインループで平然とグローバル変数を共有してた点ですね。メインループ…

C言語 どうでも良い場所に()してみる

こんにちは、こんばんは、おはようございます。 unsigned int a; a = (0x8000000); コンパイラの設定次第ですが、 ()内でいったんint型になってからのunsigned int型に代入になってしまうので、警告がでたりします。負の値を正数型に代入しましたなんてね。 …

C言語 関数の戻り値にvoidでキャスト

こんばんは。おはようございます。こんにちは。 最近、コードレビューしたら、こんな感じの見ました。 (void)strcpy(buf, "abc"); なんか少し昔に見た気がします。 "戻り値がある関数に対して、戻り値を使用しない場合は、voidでキャストする。" "コンパイラ…

単体テストを意識する

こんばんは、こんにちは、おはようございます。 お仕事で、単体テストを実施するプロジェクト、しないプロジェクトに遭遇したことがあります。結果として、単体テストを実施した方が致命的なバグの発生件数とデバッグ期間が短かったと実感しております。 た…

Linux カーネル構築失敗!

いつぞや、Linuxを使用していた時に、カーネルのバージョンアップする必要がありました。rpmでなく、コンパイルして実施。 ソース持ってきて、/usr/src/に配置。 で、ソースの中のMakefileの先頭に以下の箇所があります。 VERSION = 2 PATCHLEVEL = 4 SUBLEV…

C言語 マクロと文字列長

マクロ(#define)を理解していない人がいたので簡単にメモ。 プリプロセッサの段階で展開されるのだよ。 コンパイルの前ですよ。と、言って理解できる人は何も言わなくても理解できる人。 以下のプリント文は同じですよ。 #include <stdio.h> #define STR_ABCDE "ABC</stdio.h>…