Help us understand the problem. What is going on with this article?

自分をコンパイルするCのソース

More than 5 years have passed since last update.

小さなプログラムを書いていると、コンパイラに渡すオプションとソースコードが別管理になっているのが不便に感じる。
そこで。

hello.c
#if 0
CC_OPTS="clang -std=c99 -Wall"
target = $0+".bin"
t0=File.exist?(target) && File.mtime(target)
puts %x( #{CC_OPTS} #{$0} -o #{target} )
t1=File.exist?(target) && File.mtime(target)
if t1 && ( !t0 || t0<t1 )
  puts %x(./#{target})
end
__END__
#endif
#include <stdio.h>

int main()
{
  puts( "hello, world!");
  return 0;
}

こんな風にして、これを ruby のプログラムとして実行する。
言語の設定を変えてもう一度貼ると:

hello.c[ruby]
#if 0
CC_OPTS="clang -std=c99 -Wall"
target = $0+".bin"
t0=File.exist?(target) && File.mtime(target)
puts %x( #{CC_OPTS} #{$0} -o #{target} )
t1=File.exist?(target) && File.mtime(target)
if t1 && ( !t0 || t0<t1 )
  puts %x(./#{target})
end
__END__
#endif
#include <stdio.h>

int main()
{
  puts( "hello, world!");
  return 0;
}

便利。
タイムスタンプをもう少しまじめに見た方がいいかなぁとか、出来上がるバイナリの名前がしょぼいとか、まあいろいろあるけれど。

Nabetani
横浜へなちょこプログラミング勉強会をやっていました。 / CodeIQ の出題者でした。 / 日経 WinPC に連載を持っていました(名義が違うけど) / Yokohama rb に半分ぐらい参加しています。 / twitter : http://twitter.com/Nabetani
https://nabetani.hatenadiary.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away