ぼくのかんがえたさいきょうのHello World
文字列定数を定義
教科書とかによく載ってる、文字列を定数として定義するアレです。#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") }
これ最強wJavaScriptと互換性あるコードが書けてしまいました。
他にもあったらおしえてください。
コードはGithubにあげておきました。https://github.com/DQNEO/c-hello
他にもこんな面白いHello Worldがあるよとかあれば、Pull RequestなりTwitter(@DQNEO)なりで教えていただけるとうれしいです。
カテゴリ:
C