C - C言語のソースコードをシェルスクリプト的に実行するプログラム

2015 03 06 0 36 30

C言語はコンパイラを使ってソースコードをコンパイルし実行する「コンパイラ型言語」の代表と見られています。このC言語のソースコードをあたかもスクリプト言語であるかのように扱うことができるプログラム「C」が公開されています(Hacker News)。

Cを使えば、「c hello.c」とか、shebangを使って「./hello.c」のように、Cソースコードを通常のスクリプト言語のように実行できるのです。

インストール方法

git cloneしてcをパスにコピーするのが簡単です。

$ git clone https://github.com/ryanmjacobs/c
$ sudo cp ./c/c /usr/bin/c

/usr/binはちょっと…という場合は、/usr/local/binや、~/binなどお好みの場所にコピーしてパスを通しておいてください。

実行方法

examplesディレクトリにサンプルプログラムが入っているのでそれを動かすのが手っ取り早いです。

$ cd examples
$ more hello.c
#!/usr/bin/c
#include 

int main(void) {
    puts("Hello World!");
    return 0;
}
$ c hello.c
Hello World!

少し気持ち悪い気もしますが、ちゃんと「Hello World!」プログラムが動きました。単純な1ファイルのソースコードだけでなく、複数のファイルを指定したり、ライブラリを指定したりといったこともオプション指定によって可能です。

どうなっているの?

cコマンドは実際はbashスクリプトで、処理のキモの部分は以下のようになっています。

# compile and run
if "$CC" -I"$(pwd)" -O2 -o "$binname" ${comp[@]}; then
    shift
    (exec -a "$fname" "$binname" "$@")
    ret=$?
else
    ret=1
fi

要はソースコードを、Cコンパイラでコンパイルして実行しているだけ…という考えてみれば当たり前な作りとなっていました。試しにエラーになるソースコードを実行させてみると、処理がより明確になります。

$ c hello_error.c
/var/folders/pf/gvc5xz_j52b92qwl9y0vwdm40000gq/T/c.XXX.9CXS0xvo/hello_error.c:4:1: error:
      unknown type name 'nt'
nt main(void) {
^
1 error generated.

まとめ

C言語のコンパイル=重い処理、と思いがちですが、プログラムが短いせいか、マシンパワーのせいか、SSDのせいか、思いのほかサクサク動いて意外な気がしました。簡単なC言語のソースコードをちょっと動かしてみたい、といった用途だと実用的に使えるかもしれません。

スポンサーリンク