「NBC(Next Byte Code)はその名の通りバイトコード(中間コード)なので,アセンブラ・ライクなコーディングができるようだ。NXC(Not eXactly C)はNQC互換の単純化されたC言語ライクなコンパイラだ。」

 283話「NBCとNXC」に,上記のようにMindStorms用のプログラミング言語NBCとNXCのことを書いたが,アセンブラ・ライクなNBCとC言語ライクなNXCは実はとても似ている。NXCのコードはいったん,NBCに変換されてから,MindStorms NXTが理解できるコードにコンパイルされるようだ。

 NXCの特徴は,変数や関数の種類が豊富なことである。特にNXTからモーターがサーボモーターになったので,モーター関係の関数が充実している。

 今回はNXCの変数の種類について説明したい。ちなみに,2001年に「中学生のためのNQC入門」を書いたのだが,NQCでは変数のデータ型は16ビットの整数型だけだった。それに比べて,NXCのデータ型は本当に豊富なのだ。

 小さなデータ型から紹介すると,真偽を表すブール型,8ビットのバイト型やchar型があり,整数型には16ビットのint型,32ビットのlong型がある。

 ほかには,文字列を記憶するstring型や配列型(Arrays),そして構造体を作るstructまであるのだ。「NXCのデータ型=標準的なC言語のデータ型-ポインタ型」と言ってもよいほどの充実ぶりだ。

 NBC,NXCの開発環境であるBrick Command Centerで,変数の値を表示するプログラムを作ってみた。

 このプログラムは,変数宣言とtask main()で始まるメイン・タスクで構成される。メイン・タスクの処理の内容は,変数に値を入れ,NXTのモニタに表示することである。

 まず,変数の宣言部分から紹介する。

--------------------------------------------------------------

bool bFlg;    
byte byNum; 
int iNum;    
long lNum;    
string strMess;
int arylNum[]; 
struct robot
{
  long left_motor;
  long right_motor;
};
robot robot_car;

--------------------------------------------------------------

 ブール型bFlg,バイト型のbyNum,16ビット整数型のiNum,long型のlNumと宣言している。続けて,string型のstrMess,NXCではシングル・バイトの文字しか使えないので,string型はバイト型の配列となる。また,NXCでは[ ]を使って配列を宣言することができる。int arylNum[]とint型の配列を宣言している。

 そして,struct robotと複数の変数を持つ構造体を作成し,robot robot_carと構造体型変数を宣言して使用することができる。

 当然のことだが,プログラムはメイン・タスクから始まる。長いので半分に分けて説明する。

--------------------------------------------------------------

task main()
{
  bFlg=true;
  NumOut(0,LCD_LINE1,bFlg);
  bFlg=false;
  NumOut(49,LCD_LINE1,bFlg);
  byNum=255;
  NumOut(0,LCD_LINE2,byNum);
  byNum+=1;
  NumOut(49,LCD_LINE2,byNum);
  iNum=32767;
  NumOut(0,LCD_LINE3,iNum);
  iNum+=1;
  NumOut(0,LCD_LINE4,iNum);
  lNum=2147483647;
  NumOut(0,LCD_LINE5,lNum);

--------------------------------------------------------------

ブール型bFlgにはbFlg=trueのようにtrueとfalseを代入することができる。

 この実行結果を次のページに示す。