C言語の型チェックは、コンパイル時に行われる

C言語の型チェックの仕組み(整理版)

① 型情報は「コンパイル時」にだけ存在する

  • Cの型(int, char*, doubleなど)は、
    コンパイラがソースコードを読むときに使う“設計図” のようなもの。
  • コンパイル時に型の整合性をチェックし、
    • どの演算が有効か
    • 何バイト読む/書くか
    • 代入が安全か
      を判断する。
  • 機械語に翻訳される段階で、型情報はすべて消える

② コンパイル時にOKなら、実行時はノーチェック

  • Cではコンパイルさえ通れば、実行時に型チェックは行われない。
  • 実行ファイルの中には「この変数はint型」などの情報は一切入っていない。
  • 実行時にCPUがしているのはただの数値操作とアドレス計算。

例:

int a = 10;
double *p = (double *)&a;  // コンパイルは通る(キャストしたから)
printf("%lf\n", *p);       // 実行時 → メモリ構造が合わずゴミ値

→ 「型」は消えていて、CPUはただ“このアドレスから8バイト読め”としか理解しない。


③ コンパイルエラーが出るのは“事前チェック”のため

  • Cのコンパイラは「危険な操作を発見する最後の砦」。
  • たとえば: int a; double *p = &a; // ❌ エラー(型が違う) これは「int*double* は構造が違う」と判断して止めてくれる。
  • ただし、キャストすれば通るので「自己責任で壊せる」。

④ 実行時の世界に「型」はない

  • 実行時、メモリにはただのビット列があるだけ。 0x1000: 0A 00 00 00 CPUはこれを「int」か「char」か「double」か知らない。
    どう解釈するかはコンパイル時の型指定で決まっていた。

⑤ Cがこの仕組みを採用している理由

  • 実行時に型情報を持たないことで:
    • 実行速度が極めて速い
    • メモリ使用量が少ない
    • ハードウェアに直接近い
  • その代わり:
    • プログラマが型を間違えると暴走する(安全性は保証されない)

✅ まとめ

観点C言語の考え方
型の役割コンパイル時の設計図(実行時には消える)
チェックのタイミングコンパイル時のみ(静的型チェック)
実行時チェック一切なし(CPUは型を知らない)
目的高速・軽量・自由・低レベル操作
結果安全性はプログラマの責任

要するに:

🔹 Cは「実行時に型を守る」言語ではなく、
「型を守る責任をプログラマに委ねる」言語。

\ 最新情報をチェック /

コメント

PAGE TOP
タイトルとURLをコピーしました