2008-06-01から1ヶ月間の記事一覧

ド・モルガンの法則

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",…

文字列ストリーム

fmemopen() や open_memstream() を使用して、文字列ストリームを作成することが出来る。これらの関数を使用すると、文字列やメモリバッファを入出力の対象にすることが出来る。fmemopen() は、必要に応じてメモリを動的に確保するため、メモリに書き込みを…

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

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