覚書

SMF(svc) Service Management Facility。共通マネージメントシステム。従来のSolarisでは、各サービスはinit.d以下のrcスクリプトから起動されていた。それに変わるもの。 Solarisコンテナ Solaris10の新機能。一台の物理ハードウェア上に複数の独立した実行…

ド・モルガンの法則

1. !(P || Q) = !P && !Q 2. !(P && Q) = !P || !Q ド・モルガンの法則は多項でも成立するので、以下のような書き換えが可能。 (P || Q) && R → ( (!P && !Q) || !R)) 以下理由。 まず、全体を否定する。 !( (P || Q) && R) すると、法則2より、以下の書き換…

可変引数

関数は呼び出しに際して、個数や型が可変な引数をとることができる。インクルードファイル ではva_list 型が宣言されており、3つのマクロが定義されている。これらを用いると、呼び出された関数側では個数や型を知らない引き数のリストを、順に一つづつ読み…

プリプロセッサの##演算子

プリプロセッサ用の演算子##は、マクロ展開の最中に実引数を連結する。つまり以下の文は、 #define paste(front, back) front ## back paste(name, 1) 以下のように展開される。 name1

プリプロセッサの#記号

プリプロセッサ用の置き換えテキストの中で、パラメータ名の前に#記号が付いていれば、引用符付文字列に展開される。 つまり以下の文は、 #define dprintd(expr) printf(#expr " = %d\n", expr) dprintd(n); 以下のように展開される。 printf("n" " = %d\n",…

ビット演算を用いたエラトステネスのふるいの実装

エラトステネスのふるいは、素数を求めるアルゴリズム。 #include #include #include /* * 配列のしかるべき要素にある、望みのビットにアクセスするマクロ */ #define BITMASK(b) (1 素数は2からなので初期値は2 */ if (!BITTEST(bitarray, i)) { printf("%…

初期化と代入

自動変数に初期値が与えられていない場合、静的変数とは異なりゼロクリアされない。例えば以下の例の場合、str1とstr2の代入は等価であるように思えるが、実際には異なる。 char str1[10] = "abc"; char str2[10]; str2[0] = 'a'; str2[1] = 'b'; str2[2] = …

OOPの三大要素1 - クラス クラスとは、「まとめて、隠して、たくさん作る」仕組み。 サブルーチンと変数を「まとめる」。結びつきの強いサブルーチンとグローバル変数をまとめることが出来る。 クラス内部だけで使う変数やサブルーチンを「隠す」。グローバ…

アスペクト指向

ウィキペディアによれば、「オブジェクト指向とは直交する概念」らしい。

I/Oポートとは、CPUが外部チップや入出力デバイスとのデータやりとりをするための窓口のような回路のことである。 I/Oポートは別チップのレジスタなどに接続されていて、ハードウェア間での情報のやりとりに使用される。チップ側では、I/Oポートにアクセスさ…

エラーメッセージジェネレータ

「プログラミング作法」p.322 enum + コメントからエラーメッセージを生成する方法。

コマンド行の前に"@"が置かれると、そのコマンド自体は表示されなくなる。

エラーメッセージジェネレータ

enum + コメントからエラーメッセージを生成する方法。 「プログラミング作法」P.322