C言語

関数のアドレスとポインタ

C言語編 第43章 関数ポインタ pという名前の関数ポインタに、myabs関数のアドレスを代入するには、 p = myabs; とするだけです。次に、関数ポインタから関数を呼び出す方法ですが、これには2通りの方法があります。 ans = (*p)(-100); /* myabs(-100); …

computed goto

Gaucheのソースではgotoって使われているんだろうかと思ってのぞいてみたら、vm.cにおもしろそうな箇所発見。 /* We take advantage of GCC's `computed goto' feature (see gcc.info, "Labels as Values"). */ #ifdef __GNUC__ #define SWITCH(val) goto *d…

CGIパラメータの自前処理

Cでcgiを書くときのために、とりあえず動く小さなパラメータ処理関数を作った。 未来の自分向け使い方メモ 関数cgi()に文字列(char*)を渡すと、文字列の配列(char**)を返す。 例えば、cgi("a=123&b=%23&c=1+3")と呼び出すと、{"a","123","b","#","c","1 3",N…

statfs構造体

error: redefinition of `struct statfs'というエラーが出た。 statfsを定義しているファイルは以下の2つ。 % grep -r '^struct statfs' /usr/include /usr/include/bits/statfs.h:struct statfs /usr/include/asm/statfs.h:struct statfs {bits/statfs.hで…

外部コマンドでのフィルタ処理

popenは"r+"とかではオープン出来ないので、自前の処理を作るときのおぼえがき。 pipe(p)と実行したときにセットされるファイルディスクリプタは、p[0]に読み出し用、p[1]に書き込み用の順になっている。 dup2(fd,0);close(fd)の順に実行することでファイル…

0,1,0,-1,…の繰り返し

mod前提の0?3限定版 x%=4; return x<2?x:2-x;mod無しで正の整数に使える版 return ((x+3)/4+x/4)*2-x;