John(筋肉)の備忘録的な何か

備忘録的な何かであり、進捗そのものでもあるよ!!怖い人は見ないで!

Cのコードである上、シェルに渡しても動作するプログラムっ!

皆さんこんにちは。John(筋肉)です。

部活やら会計やら課題やらでふえぇ。。ってなってしんどい今日此の頃です。

 

先輩のいるやんさんから面白いことを聞いたので備忘録ったろうと思って書いてます。

 

では本題。

このコード、Cのコードとしてどうでしょう?

#define a int main(void){printf("Hello");}

a

コンパイルするとめっちゃwarningやらnoteやら出てきますが、コンパイルできます。

実行すると

 Hello

と返してくれます。

当たり前なんでしょうが、なんちゃってプログラマな僕には「#defineのところにそんなのいれれるのか!へ~!」って感じでしたが。。

 

まだこれではシェルでは動きません。多分。

これを動いたといえるのか??

hoge.c: 2: hoge.c: a: not found

 

次にシェルで動くやつ。

#define echo int main(void){printf("Hello");}

#define Hello

echo Hello

どうでしょう??

 

このコード、めっちゃwarningやnoteが出ますが、コンパイルできますし、

Hello

と、出力もしてくれます。

 

そんでもってシェルに渡すと、、

% sh hoge.c

Hello

%

 こうなります。

 

すごい。。初めに気づいた人しゅごい。。なんの役に立つのかあれだけど。。

 

なして動くのか。

ちゃんと動く理由はシェル上では「#」はコメント扱いになるからです。

なのでシェルが実行してるのは

echo Hello 

 ただそれだけの話となります。

 

うむ。改めて書いてみるとどうでも良さげなあれだね。

Cだと記号が使いづらい、というか使えないのがちょっと悲しい。。まぁ、同一のコードにする必要ないけど。

 

まとめ

Pythonでも同じことができそうだな?え、出来るよね?