SAK 図書館
パソコン基礎知識 C 言語編 (その二) 言語構造、注釈、変数、定数、演算子
■言語構造 ・C は複雑な開発環境である。 単純に C のソースだけでコンパイルできるものは少ない。 def ファイルがいるもの、プロジェクトファイルがいるものなど、使用する 開発環境にあわせたモジュール群が必要である。 Windows プログラミングでは、更にリソースファイルが必要となる。 /* ======================================================================== ハロー C ======================================================================== proj0001.c version 1.00 Copyright(C) 2001 Y.SAK */ // インクルードヘッダ #include <stdio.h> // 関数プロトタイプ宣言 int main(void); /* ======================================================================== メイン ======================================================================== */ int main(void) { printf("はじめての C ですのん。\n"); printf("あいうえお。\n"); return(0); } ■トークン ・C は、大文字小文字に厳密な違いがあるので注意する。 ほとんどの構文は小文字である。 ■注釈 /* ... */ ← 複数行など、この範囲を注釈にする // ← これより、右辺を注釈にする 但し、未サポートのコンパイラあり ■インクルードヘッダ #include <stdio.h> |_ ヘッダ名 ・stdio.h は、標準入出力のスタティックライブラリヘッダである。 Windows プログラミングでは、windows.h となる。 この他に様々なヘッダファイルがある。 数学関数を使用するときには、そのヘッダをインクルードする。 ・コンパイラは、自ソースにない関数をヘッダを参照して解決する。 そして、実際のライブラリ参照はリンカが行う。コンパイルは解決していて も目的の関数がライブラリで探せなければ、リンカエラーとなる。 ■関数プロトタイプ宣言 int main(void); ・自ソース内の関数であっても、呼ぶ前に出現していなければ、コンパイルエ ラーになる。ソースの記述を参照されるものほど先頭に持ってくれば解決も できるが、関数プロトタイプを記述しておくことで解決することもできる。 ■エントリ関数 int main(void) { ... } ・C は全てのコードが関数である。 OS からのエントリ関数は main() と定められている。 Windows では、WinMain() である。 ・関数の引数のスタックは、VB などと逆である。 Windows の DLL は、C 以外の言語インタフェースを考慮して PASCAL 宣言 になっている。他言語と共有するライブラリを作成するときは PASCAL 宣言 すること。 ・void は「なし」を現している。 戻り値のない関数は、void test(int a, int b) のスタイルになる。 ・return は、関数脱出関数である。戻り値を渡すことができる。 ■変数タイプ int 整数変数(コンパイラによって大きさが違うので注意) float 単精度浮動小数点変数 (4 バイト) double 倍精度浮動小数点変数 (8 バイト) char バイト変数 char [] 文字列(最後が NULL で終わる) unsigned サインビットを使用しない short コンパイラによっては、int の半分になる long コンパイラによっては、int の倍になる ・unsigned short int、unsigned long int などと使用する。 ■型キャスト C 言語は、ポインタの互換など、非常にうるさい言語である。 コンパイラを通すため、型キャスト変換と言うのを使用する。 次の例のように (int) など、() で型を指定する。 SendMessage(hCmpFile, WM_COMMAND, IDM_CNDFILE, (long) str); SetDlgText(hDlg, IDD_POINTSTX, WPrintf("%5d", (LPSTR) BsPtSv.x)); ys = ((long) bm.bmHeight - bm2.bmHeight - OffY) * xp + (OffX * bm.bmBitsPixel >> 3); adr = (long) i * xByte; ■定数 #define DATA_MAX 100 #define BYTE unsigned char ・定数は大文字で記述するのが仕来たりである。 ■演算子 + 加算 - 減算 * 掛け算 / 割り算 % 余り ++ インクリメント (+ 1) -- デクリメント (- 1) << 左ビットシフト >> 右ビットシフト ++i は、i が参照される前にインクリメントされる。 i++ は、i 参照後にインクリメントされる。 ** 小数点の演算は標準では 2 進演算のため、誤差に注意すること!! ■ビット演算子 & AND 論理積 | OR 論理和 ^ XOR 排他論理和 ■代入 = 単純代入 += 加算代入 -= 減算代入 *= 乗算代入 /= 除算代入 a = a + b; は、a += b; と等しい。 16 進数は、0x0ff と表現。 ■特殊文字 \n 改行 \r キャリッジリータン printf() などのフォーマット書式で使用可能である。 ■バイト数確認 ・使用するコンパイラの int 定義など実際に検証してみましょう。 /* ======================================================================== バイト数確認 ======================================================================== proj0002.c version 1.00 Copyright(C) 2001 Y.SAK */ // インクルードヘッダ #include <stdio.h> // 関数プロトタイプ宣言 int main(void); /* ======================================================================== メイン ======================================================================== */ int main(void) { int a; short int b; long int c; float d; double e; char f[11]; printf("-- バイト数確認 --\n"); printf("int = %d バイト\n", sizeof(a)); printf("short int = %d バイト\n", sizeof(b)); printf("long int = %d バイト\n", sizeof(c)); printf("float = %d バイト\n", sizeof(d)); printf("double = %d バイト\n", sizeof(e)); printf("char [11] = %d バイト\n", sizeof(f)); return(0); } ■パソコン基礎知識 C 言語編資料
■プログラミング言語資料
■パソコン基礎知識 ハード編資料
■パソコン基礎知識 画像編資料
■パソコン基礎知識 Windows 編資料
■コンピュータシステム導入編資料