Cのコードである上、シェルに渡しても動作するプログラムっ!
皆さんこんにちは。John(筋肉)です。
部活やら会計やら課題やらでふえぇ。。ってなってしんどい今日此の頃です。
先輩のいるやんさんから面白いことを聞いたので備忘録ったろうと思って書いてます。
では本題。
このコード、Cのコードとしてどうでしょう?
#define a int main(void){printf("Hello");}
a
コンパイルするとめっちゃwarningやらnoteやら出てきますが、コンパイルできます。
実行すると
Hello
と返してくれます。
当たり前なんでしょうが、なんちゃってプログラマな僕には「#defineのところにそんなのいれれるのか!へ~!」って感じでしたが。。
まだこれではシェルでは動きません。多分。
これを動いたといえるのか??
次にシェルで動くやつ。
#define echo int main(void){printf("Hello");}
#define Hello
echo Hello
どうでしょう??
このコード、めっちゃwarningやnoteが出ますが、コンパイルできますし、
Hello
と、出力もしてくれます。
そんでもってシェルに渡すと、、
% sh hoge.c
Hello
%
こうなります。
すごい。。初めに気づいた人しゅごい。。なんの役に立つのかあれだけど。。
なして動くのか。
ちゃんと動く理由はシェル上では「#」はコメント扱いになるからです。
なのでシェルが実行してるのは
echo Hello
ただそれだけの話となります。
うむ。改めて書いてみるとどうでも良さげなあれだね。
Cだと記号が使いづらい、というか使えないのがちょっと悲しい。。まぁ、同一のコードにする必要ないけど。
まとめ
Pythonでも同じことができそうだな?え、出来るよね?