次のソースコードをコンパイル出来るようにしなさい。
なお、前後に文を追記する事は幾らでも可能とします。
(※ただし、ダブルクォーテーションで囲うなど無意味化する事は除く)
if(;;) nakanaide('-');
(続きに答えがあります)
Twitterにて「まぁ、コンパイルできねぇよとか怒られるわけですけども。」と言う話題がありまして。んじゃ俺がコンパイル出来るようにしてやんよ!と思ったのが発端。
で、答えは以下の通りです。
#define if for
void nakanaide(char c){}
void main(){
if(;;) nakanaide('-');
}
「'-'」はそのままchar一文字として扱っちゃえば何の問題もないですね。
ifの中に(;;)ってのはなかなかどうしようもないので、ifをforに置き換えてやったらすんなり行けました。
このくだらない企画。実は以前に、どっかの別のサイトの日記で似たような話題がありました。
面白そうだなぁ、と思いつつも余りのレベルの高さについて行けなかった訳ですが・・・(何
で、まぁ、その日記の中で、上のようなテクニックを使ったりしていたんですね。
実際にはもっと高度なテクニックを幾つも使っていたのですが・・・まぁ、到底理解できなかったですね。(苦笑
とりあえず、そのうちの幾つかは「へー。なるほどなー。」と思いました。上に上げた#defineで全く別のものに置き換えちゃう他に、#、##による文字列連結とか。・・・あと・・・なんだっけ・・・てか当時の自分にはそれくらいしか理解できなかった気がする。(何
とりあえずまぁそんな無意味で、くだらなーい企画なのですが、結構頭の体操になります。
また、色々とあれこれ捏ね繰り回していくうちに、新たなCの側面を見つけられるかも知れません。
実際のプログラミングで役立つかどうかは分かりませんが・・・いや、きっと何かの機会に役立つはず・・・!(何
まぁそうでなくとも、「固定観念に捉われず、最適解を導き出す」と言うのはプログラマにとって凄く大事な事ですので、是非、自分で色々と問題を考えて、アタックしてみると良いでしょう。
とりあえず以下に、もう一つ問題を挙げておきますね。
nakanaide('-')/ gusun(;;)
答えはそのうち、これのコメント欄か、別の日記かに起こします。
ちょ、いつの間にこんな企画になってんのwwwww
発端は俺の発言とはいえ、俺の扱える言語ではその手を使えないのよね多分。。。PHPとかPerlとか。
PHPとかPerlはあんま詳しくないけど、多分defineとかなかった気がするし、無理だろうねぇ・・・。
$とか入ってたりするとPerl有利なんだろうけどね。(何
defineはあるけど、定数のみなんよ。マクロ展開はしないのだわ。