C/400

2. C/400 での HelloWorld

iSeries400での C言語開発では2次言語の英語とともに PCOMM または CA/400 で
「939日本語英数小文字拡張」で接続しておいて Ctrl + F3キーによって
英小文字を入力できるようにしておく。
さらに、

CRTSRCPF FILE(MYSRCLIB/QCSRC) IGCDTA(*YES) CCSID(66535)   AUT(*ALL)

によってソース・ファイルを作成するとCソースの中でも日本語のコメントなども入力できるようになる。
STRSEU MYSRCLIB/QCSRC HELLO のようにして SEU を起動して

0001.00 #include <stdio.h>
0002.00 #include <stdlib.h>
0003.00 #include <string.h>
0004.00
0005.00 #define TRUE         0
0006.00 #define FALSE       -1
0007.00
0008.00 void main(void){
0009.00     printf("Hello World C Language¥n");
0010.00     getchar();
0011.00 } 

のようにソースを入力する。
最初の3行の

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

は、C言語の基本的な処理に必要なヘッダー・ファイルの読み込みを指示している。
C言語ではさまざまな機能はライブラリーとして提供されていて、それらの API や
関数を使用するには、その機能に見合ったヘッダー・ファイルの読み込みが必要となってくる。
ちなみに <stdio.h> とは ライブラリー QCLE のファイル H のメンバー STDIO を包含することを指示している。

次に #define TRUE 0 と #define FALSE -1 は TRUE という値 0 の変数と -1 を FALSE という
変数として定義している。
この PGM では使用しないが将来のため、つねにこの2つは定義しておくと便利である。
次に、

void main(void){
}

というのはメイン関数であり、*PGM の場合は main 関数が呼び出されて最初に実行されるようになっている。
printf("Hello World C Language¥n"); は標準出力への出力を意味しており、対話式で実行した場合は
結果は画面に表示され、バッチで実行した場合は結果はスプールに出力される。
注意しして欲しいのは ¥n という改行コードである。
¥n の文字 ¥ は円記号でなくバック・スラッシュ(キー・ボードのひらかな「ろ」のキー)でなくてはならない。
次の getchar(); はユーザーからの文字入力を待つためのものであるが実際は一時停止として
使用されることのほうが多い。
getchar(); が無いと HelloWorld という出力は目にも止まらぬ速さで終わっていまい、
確認することができないからだ。

ソースの入力が完了したら

CRTBNDC PGM(MYOBJLIB/HELLO) SRCFILE(MYSRCLIB/QCSRC) AUT(*ALL)

のようにしてコンパイルを実行する。
首尾よくコンパイルが成功すれば

CALL MYLIB/HELLO

Hello World C Language と表示されるはずである。
C言語といっても基本はこのように Java よりもやさしい。
わずかなコツをひとつずつ覚えていけば C言語でiSeries400上でのあらゆる処理が可能であり、
RPG では使用できない API も C言語からであれば必ず使用することができる。
しかも iSeries400 では C言語のパフォーマンスが最も優れている。
OS/400 も実は C言語によって書かれていると IBM も明言している。