マクロハック

GNU catのソースよんでま〜す。そんなわけで、safe_read.c safe_write.cからのハック。

つまらない処理を担当するsafe_read.c,safe_write.cでは、1つのソースから2個のプログラムを吐いちまおうって寸法。簡単にread.cとwrite.cを作ってテストしてみた。

write.c
#define WRITE
#include "read.c"
read.c
#ifdef WRITE
# define f_rw f_write
# define rw write
#else
# define f_rw f_read
# define rw read
#endif

void f_rw(int fd, void const *buf, size_t count)
{
	/* つまらない処理 */
	rw(fd, buf, count);
	/* つまらない処理 */
}


今回はテストなので、結果がわかりやすいように、プリコンパイルだけを実行する。コンパイルすると怒られるので注意。

% gcc -E read.c write.c
(略)
void f_read(int fd, void const *buf, size_t count)
{
 read(fd, buf, count);
}
(略)
void f_write(int fd, void const *buf, size_t count)
{
 write(fd, buf, count);
}
(略)

見事に、1つのソースから2個のプログラムを吐くことに成功した。使うことは・・・無いかなぁ・・・