CodingFirst

C言語、Perl、JavaScript、最近はPythonも。出来上がったものより、プログラムを書くことが好き。あと、スイーツ。

スポンサーサイト

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

C/C++の#if 0ハック。すごいなー

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

このハックすごいなー。

http://d.hatena.ne.jp/Seasons/20090504/1241390314

C/C++はコンパイラ型言語だけど、それをインタプリタのイメージで実行するのが特徴かな。

普通、「Cインタプリタツールを使って...」だと思うのだけど、そうするとどうも C言語感が薄れる。「CインタプリタツールはWindowsでしか動きません」とか「printfは可能だけど、ライブラリのリンクはできません」とか。なんだ、Cの文法を持つ、Cインタプリタ言語じゃん...みたいな。結局、C言語とインタプリタの間になんか壁があるなぁ...みたいな。けど、この方法では使ってない。まー sh gcc は使うけど、それは壁なのか?どうなのさ?んー。悩ましい。

コンパイルして実行してるけど、インタプリタっぽい。これはどういう分類なんだろうか。とりあえず C はコンパイラ型の言語としても、もしこう書く新規の言語があった場合、どう思うだろう?...んー、たぶん、コンパイラとかインタプリタとか、そういう区別自体、どうでもいいことなのかも知れない。まーいいじゃん。そんなことよりコード書けよ...かな。

すごいなー。感動。

自分用に貼っとこっと。

#if 0
#!/bin/sh
gcc -o ${0%.*} $0 && ${0%.*} $* ; exit
#endif
#include 
int main(int c,char*v[]){
 while(c--) printf("%s ",*v++);
 printf("\n");
 return 0;
}

を hoge.c に書いたとして、

% ./hoge.c

とする。あれ? でも、これって

alias hoge='gcc -o hoge hoge.c && ./hoge'

と書くのと変らない気がする。いや、hoge.c に書くのがいいとこか。

#if 0
#!/bin/sh
gcc -DTEST -o ${0%.*} $0 && ${0%.*} $* ; exit
#endif
#include 
#include 
void func(void) {
 ....
}
#ifdef TEST
int main(int c,char*v[]){
 int ret = foo();
 if ( ret == 0 ) return 1;
 return 0;
}
#endif

とするといいかな。.c を実行した場合は単体テストみたいな。かなり昔だけど、Java 使ってたとき、こういうコードが好きでよく書いてたかも。

これはいいネタだなー。おぼえとこっと。

もちろん、こういうコードは嫌われやすいので使う場面には気をつけよう。

スポンサーサイト

 | HOME | 

Search

Recent Entries

Foot Print



Categories

Monthly

Recent Comments

Recent Trackbacks

Profile

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。