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 編資料
■コンピュータシステム導入編資料