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("%…