W.I.S. Laboratory
menu-bar

ポケコン


SHARP PC-G850V のC言語について

SHARPのポケコン「PC-G850V」はC言語が使える。
C言語と言っても、マシンコードではなく中間コードにコンパイルされるようだ。
なのでMicrosoftBasicのような中間コードインタプリタ方式ともいえるし、JavaのようなVM方式ともいえる。
中間コード方式とはいえ、同じような処理をさせたBASICに比べると実行速度は随分速い。
これはBASICに比べて実行時の厳密なエラーチェックなどが端折られているためではないかと思う。(Cらしくオーバーフローもアンダーフローもバッファオーバーランも平気でするし)

PC-G850VのCコンパイラ(中間コード方式)

作成されたのは1995年のようなので、当然C99には対応していないがC89はすでに世に出回っている頃だ。
エディタはSHARPらしい行番号必須のBASICライクなものだが、C文法についてはC89がかなりのところまで忠実に動くようになっている。(C89とまったく同じではない。「C言語」を名乗れるギリギリの仕様になっているのだろうと思う)

stdio.h や stdlib.h をインクルードしなくても、printf関数やmalloc関数が使える。(というか標準ライブラリが無い)
標準ライブラリ以外はほぼC89なので、当然だが「//」による1行コメントやlong long型、_Bool型、_Complex型などは使えないし、変数はブロックの先頭以外では宣言できない。
もちろんVLA(可変長配列)も使えない。
また、C89ベースなので型を省略した宣言は暗黙的にintと見なされてしまうし、関数の型を宣言しなくても動いてしまう。(例: main関数を main() { ... } と書いてもエラーにならない。C99以降は int main(void) { ... } 書く必要がある)
ただ、一般的なC89では普通に使えるものが使えなかったりもする。
使えないのは

  • 関数型マクロ
  • 列挙型 (enum)
  • typedef
  • ブロック先頭での変数宣言(関数ブロック先頭でのみ宣言可能)
といったところだ。
関数型マクロを書いても単純に展開されるだけなので関数として機能してくれず、大抵はundefineになってしまう。
enumはまったく使えない。(Syntax Errorになる)
typedefできないので、型名はそのまま書く必要がある。
構造体や共用体もtypedefできないので、変数を宣言するときも戻り値が構造体や共用体の関数を定義するときも「struct ~」「union ~」と書かなくてはならない。
C89では関数の途中でもブロックを作成すれば、そのブロックの先頭で変数の宣言ができる(スコープはそのブロック内となる)のだが、PC-G850Vでは関数ブロックの先頭でなければ宣言できない。

型のサイズなどについて

PC-G850Vの型のサイズは以下のようになっている。
  • char : 8bit (-128~127)
  • short : 16bit
  • int : 16bit
  • long : 32bit
  • long long: 無し
  • float: 32bit
  • double: 64bit
  • long double : 64bit
C89にはlong longが無い。
char型の範囲は-128~127となっているので割と新しい。
8bitを0~255で扱いたい時はunsigned charを使う必要がある。
64bit精度ではあるものの、long double型が存在しているあたりはさすが計算機という感じがする。


[ 戻る ]
saluteweb