C
これは使えそう。 Comma operator - Wikipedia x = (a, b); y = (a, b, c); っていう処理があった場合、xにはaの処理をした後にbがxに代入される。 同じくyには、aとbの処理がされた後にcがyに代入される。 int x; int a=0, b=1, c=2; x = (printf("a=%d \n"…
こんな感じで書かれたマクロを見ることがある。 #define SWAP(x, y) do { int temp = x; x = y; y = temp; } while(0) do-while(0)で囲んでいるのは、ブロックで囲まれていないif文での意図しない動作を防ぐため。 例えば、以下の場合に有効。 /* do-while(0…
これ、知らなかった。bÅÍøȪÌÖè`fnc( )Ífnc(void)ÅÈfnc(...) C言語において int fnc( ) という引数を省略した表現は、 int fnc(...) という、引数がいくつあってもよい、という意味になる ... が省略されている状態であって int fnc(voi…
C言語で、あるモジュールを制御するような構造体があるとする。 どの制御を行うかの選択は上位モジュールに行わせたいが、制御で使用する構造体のメンバは見せたくない、といった場合、構造体の不完全型宣言で解決できる。 以下に等比数列・等差数列を計算す…
C言語の関数ポインタは振る舞いを動的に変えるのに便利。 だけど、関数の型情報に縛られるのは何とかできないかと調べていたら、関数ポインタをキャストしてしまえば、どんな型の関数でも実行できることを知った。 ポインタ虎の巻〜関数ポインタの使い方 #in…