ぼくのかんがえたさいきょうのHello World

C言語のプリプロセッサを使えば変態的なHello Worldが書けることに気づいたのでチャレンジしてみました。

ふつうのHello World

まずふつうのやつです。
#include <stdio.h>

main() {
    printf("hello world\n");
}
これをベースに、プリプロセッサ(#define文)をつかって変形していきます。

文字列定数を定義

教科書とかによく載ってる、文字列を定数として定義するアレです。
#include <stdio.h>
#define hello "hello world\n"

main() {
    printf(hello);
}
まあふつうですね。

#defineをもっと突っ込んでみる

printfまで含めて#defineで定義できるのかやってみたら、何とできました。
#include <stdio.h>
#define hello printf("hello world\n")

main() {
    hello;
}
もう定数という感じじゃないですね。

次に、セミコロンも含めて#defineで定義できるのかやってみたら、これもできましたw
#include <stdio.h>
#define hello printf("hello world\n");

main() {
    hello
}
もうこうなるとC言語じゃなくなってきた感じがしますね。

さらにさらに、main関数も含めて#defineで定義できるのかやってみたら、これもできましたw
#include <stdio.h>
#define hello main() {  printf("hello world\n"); }

hello
さすがC言語ですね。
自由度の高さは圧倒的です。

さいごはhの一文字に

しまいにはhの一文字だけでHello Worldが書けました。
#include <stdio.h>
#define h main() {  printf("hello world\n"); }

h
なんじゃこれw

ヘッダーファイルにロジックを分離

本文の短さにこだわるのであれば、ヘッダーファイルに全てのコードを追い出してしまえば、本文はゼロになります。
hello.h
#include <stdio.h>
main() {
    printf("hello world\n");
}
hello.c
#include "hello.h"
これが最小のhello worldですかね。
もはやどっちがヘッダーでどっちが本文だかw

モノマネ系

さて、今度は趣向を変えてC言語くんにモノマネをやってもらいましょう。
#include <stdio.h>
#define print(x) printf(x);
#define sub main()

sub {
    print("hello world\n");
}
なんかPerlっぽいw
#include <stdio.h>
#define p(x) printf(x);
#define m() main()

m() {
  p("hello world\n")
}
なんかLispっぽい?

究極のモノマネ

#include <stdio.h>
#define alert(x) printf(x);
#define function() main()

function() { alert("hello world\n") }
これ最強w
JavaScriptと互換性あるコードが書けてしまいました。

他にもあったらおしえてください。

コードはGithubにあげておきました。
https://github.com/DQNEO/c-hello

他にもこんな面白いHello Worldがあるよとかあれば、Pull RequestなりTwitter(@DQNEO)なりで教えていただけるとうれしいです。
カテゴリ:

人気記事