easy-C (2023.02.09版)
easy-C とは?
- 「easy-C」はC言語をもっと手軽にできたらいいんじゃないかな?というただそれだけの思い付きで始まった開発プロジェクトです。2023年1月10日から始まりました。
- その後、作って使っているうちに、あれこれとやってみたいことが増えて機能をつけ足していきました。また結局この機能はいらないとなって、消えていったものもあります。
- easy-Cは毎日のように改造されつつあって、easy-Cとは何か?も二転三転しているのですが、現状では「C言語の文法が使えるシェル(を目指した何か)」になっています。
- 出発点のアイデアはこうです。・・・#includeとかmainとか、そういうのは初心者にとっては「よくわからないおまじない」でしかありません。いや、それが何を意味するのか、なぜ必要なのかを説明してわからせることもできるでしょうが、結局は毎回同じことを書くだけであって、手間を増やしているだけにすぎません(もちろん上達すれば、#includeを変えたり、mainではない関数も書くようになるのですが)。・・・そうであるならば、いっそ「mainの中身だけ書けばよい」というモードがあったらどうでしょうか。#includeに関してはもう面倒なので標準関数は全部インクルードしておきます。もしこれではかえって不便ということになったら、それはもう初心者卒業だと思うので、このモードを脱して普通にC言語のソースコードを書けばいいと思います。
ダウンロード
- https://essen.osask.jp/files/easyc001a.zip (50.3KB)
- [注意] Windows8以降では、exeを実行しようとすると「Windows Defender SmartScreen は認識されないアプリの起動を停止しました。」というメッセージが出て起動をブロックされるようです。
- これが出たら「詳細情報」をクリックすることで「実行」を選べるようになります。・・・もしこれが怖かったら、実行をあきらめたほうがいいでしょう・・・(私だって責任は取れないので)。
- (ちなみに、ソースをコンパイルして自分でexeファイルを作るという方法でも解決できます。)
- このメッセージは、実際に問題があろうとなかろうと、ダウンロードしてきた実行ファイルにデジタル署名がついていなければ、(一度許可されるまでは)必ず出てくるもののようです。だからexeに危険なコードが含まれているから出ているというわけではありません。
easy-C でできること [シェル編]
- 起動するとコンソール画面にプロンプト HL9> が出ます(これはeasy-CがHL-9の改造版として作られたことに由来します)。それでこんなことができます。
HL9>printf("hello, world\n"); ← 一行で書けるなら、C言語でワンライナーできます。
hello, world
HL9>j = 0; for (i = 1; i <= 10; i++) { j = j + i; } printf("sum=%d\n", j);
sum=55
HL9>AWin *w = aOpenWin(256, 256, "graphics"); for (j = 0; j < 256; j++) { for (i = 0; i < 256; i++) { aSetPix(w, i, j, aRgb8(j, i, 0)); }} ← acl1ライブラリを使ったグラフィックもできます。

HL9>run kcubei.c ← runコマンドを使えば1行では書けないプログラムも実行できます。ちなみにkcubei.cは33行のテキストファイルです。キューブが回ります。

HL9>$type kcubei.c ← 先頭に$をつけるとシェルコマンドが実行できます。
static int sqr[24] = { 7,6,2,3, 6,4,0,2, 1,0,4,5, 7,3,1,5, 3,2,0,1, 7,5,4,6 };
int vertx[8], verty[8], vertz[8], vx[8], vy[8], vz[8], sx[8], sy[8];
int centerz[7], b0[160], b1[160], thx, thy, thz, xp, xa, yp, ya, zp, za, xt, yt, zt, t;
AWin *w = aOpenWin(256, 160, "kcube-i"); int y0, y1, x, y, c, dx, *b, yk;
for (i = 0; i < 8; i++) {
vertx[i] = ( (i >> 2) * 2 - 1) * 50;
verty[i] = (((i >> 1) & 1) * 2 - 1) * 50;
(中略)
HL9>$dir hl9.exe
ドライブ D のボリューム ラベルは KIOXIA です
ボリューム シリアル番号は 884B-20D6 です
***** のディレクトリ
2023/02/08 23:09 31,232 hl9.exe
1 個のファイル 31,232 バイト
0 個のディレクトリ 158,890,967,040 バイトの空き領域
HL9>play "cdefedcr efgagfer crcrcrcr c8c8d8d8e8e8f8f8edcr"; ← 「かえるのうた」が鳴ります。
HL9>!run kray.c ← 先頭に!をつけると、gccでコンパイルしてから実行になります。

- テキストファイルにC言語で適当に関数を書いて、保存してそのファイル位置を設定ファイルに書いておくと、
char *myfunc(int a, int b)
{
char *s = malloc(100);
sprintf(s, "hello: a+b=%d\n", a + b);
return s;
}
- コマンドラインから簡単に利用できます。イメージとしてはスクリプトファイル(バッチファイル)を書いている感覚です。だだしこれは(現状のバージョンでは)gcc実行モードでしか機能しません。
HL9>!puts(myfunc(2, 3));
hello: a+b=5
- [まとめ]
- C言語で気軽にワンライナーができる。
- インタプリタ実行だとコンパイル時間がない分だけ速いが、gccとは多少動きが違うところもある。まだfloat/doubleが使えない。
- gcc実行だとコンパイル時間の分だけ待たされるが、実行に入れば速い。
- C言語でスクリプトが書ける。
- シェルコマンドも自由に使える。
easy-C でできること [プログラミング入門編]
- まず、C言語でプログラミング入門といえば、まずは hello, world です。しかしたった一行の表示のために、ファイルを作って何行も書いてコンパイルしたら、それは「えー、そんなの全然うれしくないじゃん」って思うのが普通でしょう。easy-C ならそれくらいはワンライナーでできます。
HL9>printf("hello, world\n");
hello, world
- いやいや、これでもまだうれしさはありません。helloと書きたいならhelloを5文字だけ入力すればいいのです。printfとか書き足すだけ面倒というものです。
- そこで! play文なのです。play文はMMLを演奏するだけの機能で、昔のBASICでは普通にできたことです(少なくとも富士通系のF-BASICにはFM-7以降には標準搭載でした)。
HL9>play "cdefgabo5c"; ← ドレミファソラシド
- これだけで音が鳴ります。これは小学生にウケます!画面にテキストを表示するのとはわけが違うのです。
- あーでも待ってください。キーボードは普通は大文字が刻印されています。小学1年生とかですと、英語の小文字なんて想像もできません。それじゃあ入力できないですよね。だからCapsLockしてあげてください。
HL9>PLAY "CDEFGABO5C";
- これでちゃんと同じように鳴ります。easy-Cでは入門向けの命令は、みんな大文字だけで書けるようにしてあるのです。
- ここで説明し忘れを思い出しました。実はPLAY文はカッコ無しで書けるのです。カッコがあると入門者は面倒に感じるのです。easy-C はputs()が使えますが、prs というのも使えます。そしてこれはカッコ無しで書けますし、大文字もOKです。
HL9>PRS "HELLO";
HELLO
- intで計算して表示するだけなら、PRという命令もあります。
HL9>PR 1+2*3;
7
- 式にカッコが混ざると、easy-Cは引数の範囲を認識できなくなるので、カッコをつけてやってください(すみません、アルゴリズムが雑なのです・・・)。
HL9>PR((1+2)*3);
9
- 実数計算もできますが、それはインタプリタ実行ではなく、gcc実行にしてください。なおprfは大文字で書いてもいいですが、sqrtは大文字で書けません(入門者向き命令とは認識されていないので)。
HL9>!prf(sqrt(2));
1.414214
- PLAYやPRなどはすごくC言語らしくない文法ですが、それは easy-C 側で何とかしますので、C言語と混ぜ書きしていいです。ですから、PLAY命令をテキストファイルに書き込んでRUNすればちゃんと演奏されます。
- Windowsってファイルの新規作成がちょっと面倒です。エクスプローラで右クリックして新規作成して、名前と拡張子を変更して・・・。こんなの小学生には教えられません。だから、
HL9>NEW MUSIC1.C
- これだけで MUSIC1.C ができるようになってます。なお、もしこのファイルが既にあった場合は、その内容をそのまま残すようにしていますのでご安心を。小学生の努力をちょっとした失敗で全部消すような残酷なことはしません!
- ファイルができた後はエクスプローラ上でダブルクリックすれば編集できますが(拡張子の関連付けがちゃんとできているとして)、もしそれが面倒なら、
HL9>$$MUSIC1.C
- でもいけます。これでテキストエディタが起動します。
- もちろんプログラミングの本当の楽しさは変数を使って処理を書き始めてからです。easy-Cはグラフィック命令もありますので、変数を使い始めたらかなりの表現力があります。・・・そうはいっても、最初は変数なんてわかりません。だから最初は変数なしでやることになります。そしてそうなると、PLAY文の存在は非常に重宝するのです。
- [実践例]
- 小学1年生でピアノに興味のある女の子の例です。楽譜はシャープやフラットがなければ読めます。
- まずテキストファイルを開いてフォントを大きくしてCapsLockして、ABCDEFGHIJKLMNOPQRSTUVWXYZを入力するのに何秒かかるかを計りました。1日15分くらいで3日間くらいやると、60秒を切るようになりました。これを頑張らせるモチベーションは、「100秒を切ったらおやつを追加してあげよう」みたいなことを言えばすぐにやってくれました(できるまでおやつはお預けとかだときっとPC遊びが嫌いになってしまうと思われますのでご注意を)。
- 次に簡単な曲をPLAY文で親子一緒に書きました。徐々に親の手を借りずにできるようになってきます。「かっこう」とか「いーとまきまき」とか、そういう短い曲を何曲か作ってると、4曲目くらいからほとんど自分一人で作れるようになりました(これも一曲できるごとにお菓子を親子で食べて大げさにお祝いするなど、なにか工夫は必要です)。
- 小学1年生が、手本のプログラムを書き写すのではなく、しかもスクラッチでもなく、楽譜とちょっとしたメモ紙(C=ド、D=レとか書いてある)を見るだけでプログラムを書いている様子は、すさまじく感動します。easy-C はすごいなと思いました(自画自賛)。
- [発展案]
- a23_usm004の2023.02.03 Fri #3にPR/GO/IFをマスターするためのカリキュラム案があります。
easy-C に関する技術的な説明
- easy-Cのhl9.cはC言語で798行のプログラムでしかありません。hl9.exeも31.0KBしかありません。このhl9.exeがあれば、本家のacl1ライブラリを持っていなくても、acl1ライブラリにある機能は一通りインタプリタ実行モードから使えます。Windowsが標準で持っているもの以外はhl9.exeがすべて自前で持っています。このhl9.exeが結構な働き者で、子供用のPCへのインストールは楽です。
- gcc実行モードを使うときは、acl1やcacheディレクトリが必要になりますし、ec_inc0.cやec_int1.cなどの設定ファイルも必要になります。あとMinGWのインストールも必要です。
開発に関する最新情報
- a23_useSelfMade 自分で作ったものを自分で使う
- ここに easy-C のサンプルプログラムがたくさんあります。開発の様子もここで見られます。