[インラインC版: 2016.10.13]
0001: f = inline.c {{
0002: void entry(int *p)
0003: {
0004: static char a[10001]; // Essenでは大きなスタック変数は取れない
0005: int i, j, c = 0;
0006: for (i = 2; i <= 10000; i++)
0007: a[i] = 0;
0008: for (i = 2; i <= 10000; i++) {
0009: if (a[i] != 0) continue;
0010: c++;
0011: for (j = i * 2; j <= 10000; j += i)
0012: a[j] = 1;
0013: }
0014: *p = c;
0015: }
0016: }}
0017: c = zerobyte(4)
0018: f(c)
0019: print(getBl32(c, "c").c)
- [解説]
- 1行目から16行目は関数宣言である。だから一度実行すれば何度も実行しなくてもよいものではある。
- このサンプルでは、新出ローカル変数に対して#を省略してもエラーにならないモードを前提にしている(簡便のため)。
- getBl32という関数は、第一引数にバイト列を取り、第二引数にフォーマット文字列を取る。上記の例だと「32bitの整数にcという名前を付ける」という意味になる。ということで、構造体が作られてメンバ名cに値が入る。