C言語基礎3

1972年にベル研究所のDennis M. Ritchieが設計
UnixもC言語で書かれている
C++、JavaなどはC言語をモデルに設計されている
ANSI(American National Standards Institute)が標準化してANSI/ISO 9899という規格を作った
日本では、JIS X 3010-1993に翻訳した(JIS C)

コンパイラで機械語に変換する。これをオブジェクトモジュールと言う
複数のオブジェクトモジュールを一つにまとめることをlinkと言う linkを行うのはリンカと言うソフトウェア
プログラムを実行させるには、コンパイルしてリンク処理を実行する必要がある。

test1.c -> test1.obj ↓
test1.c -> test2.obj -> link -> test1.exe

### Unixでの操作
gcc smp1.c // a.outが作成される
gcc -o smp1 smp1.c // -oスイッチでファイル名を指定

unixでは、パス設定がされていない場合、カレントディレクトリのファイルをそのまま実行することはできないが、”./”を付与すれば実行することができる。
カレントディレクトリのパスは以下のようにする
$ PATH=$PATH:$HOME/cwork

品質を高めるためには、errorだけでなく、warningも修正した方が望ましい

### 最初のC

#include <stdio.h>
/*
第一歩
*/
int main(void){
	printf("Helicopter money\n");
	return 0;
}

*.hのファイルをヘッダファイルと呼ぶ
stdio.hは入出力時に必要
int main()は、main関数が返す値が整数値であることを指定 main(void)のvoidは、main()に渡されるデータがないことを指定している
文にはセミコロン(;)を付ける
printf()は標準ライブラリ関数
return 0は、正常終了の時はOSに0を、異常終了の時は1異常を返すのが慣例になっている

#include 
/*
インデント
*/
int main(void){
	int i, sum, mul;

	sum = 0;
	mul = 1;
	for(i=1; i<=5; i++){
		sum = sum + i;
		mul = mul * i;
	}
	printf("sum=%d mul=%d\n", sum, mul);
	return 0;
}

$ ./dev
sum=15 mul=120

### データ出力

int main(void){
	int a;
	double b;

	a = 100;
	b = 12.34567;

	printf("a=%d\n", a);
	printf("a=%f\n", b);
	return 0;
}

### コメント
/* コメント */

### 識別子
- 英文字または_で始まらなければならない
- 長さに制限はないが、31文字(C99は63文字)が識別対象になる
- 予約語を識別子に使うことはできない。例: for
- 大文字と小文字は区別される

### 予約語
auto, double, int, struct, break, else, long, switch, case, enum, register, typedef, char, extern, return, union, const, float, short, unsigned, continue, for, signed, void, default, goto, sizeof, volatile, do, if, static, while

※C99追加
inline, restrict, _Bool, _Complex, _Imaginary

スクリプト言語と比べて、変数代入時の型指定のところがまだとっつきにくいです。