C言語で自己表示するには?

これ結構難しいです。

で、自己表示ってなにか?


#include <stdio.h>

int main( int argc, char** argv)
{
printf("Hello, World!!\n" );
return 0;
}

これは画面に Hello,World!! と表示されます。さて、自己表示って言うのは引数無しでプログラムを実行すると自分自身(ソースコード)を表示してしまうプログラムです。

安直に考えると、プログラムをxxx.c として

#include <stdio.h>
#include <stdlib.h>

int main( int argc, char** argv)
{
FILE* fp;
char buf[256];

FILE* fp = fopen("xxx.c", "r" );
while( fgets(buf, 256, fp) )
{
printf("%s", buf);
}
fclose(fp);
return 0;
}

としてしまいそうです。でもこれは反則。なぜならprintfで自分自身を表示していません。
printf関数一個一回だけの呼び出しですませないと駄目です。
ちなみに、printf("xxx.c" ); としても反則です。なぜなら表示されるのは xxx.c です。問題を正しく解いているなら画面にも printf("xxx.c" ); と表示されないと駄目です。

一見出来そうも無い問題ですが、、、、
回答は後日に。