Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

Cプログラムを機械語に変換する4つのステップを徹底解説

プログラムの作成と実行の流れ

プログラムとは、プログラミング言語で記述された一連の命令の集まりです。プログラマーの仕事は、プログラムを作成し、その動作を確認することです。

Cプログラムを機械語に変換して実行可能な形にするまでには、次の4つのステップが必要です。

  1. プログラムの作成と編集
  2. プログラムのコンパイル
  3. プログラムのリンク
  4. プログラムの実行

1. プログラムの作成と編集

  • プログラムの作成には「テキストエディタ」を使用します。
  • テキストエディタを使えば、文字データの入力・修正・保存が自由に行えます。
  • 多くの場合、コンパイラには専用のテキストエディタが付属しています。
  • プログラムを書き終えたら、ファイルとしてディスクに保存します。このファイルは「ソースファイル」と呼ばれ、コンパイラへの入力となります。

Cプログラムを機械語に変換する4つのステップを徹底解説

2. プログラムのコンパイル

「コンパイラ」とは、ソースプログラムを機械語へ翻訳するソフトウェアです。Cコンパイラは、大きく分けて次の2つの段階で構成されています。

  • プリプロセッサ
  • トランスレータ

プリプロセッサ

  • ソースコードを読み込み、トランスレータが処理しやすい形に整えます。
  • プリプロセッサへの指示は「#」記号で始まります。
  • これらの指示により、必要なコードライブラリの読み込みや文字列の置換などが行われます。
  • 前処理を経た結果は「翻訳単位(translation unit)」と呼ばれます。

トランスレータ

  • 翻訳単位を読み込み、機械語に変換して「オブジェクトモジュール」を生成します。
  • ただしこの時点では、C標準ライブラリなどの外部関数が含まれていないため、まだ完全な実行可能ファイルではありません。

3. プログラムのリンク

「リンカ」は、入出力(I/O)関数やライブラリ関数、ソースプログラム内で定義された関数などを結合し、最終的な実行可能プログラムを組み立てます。

Cプログラムを機械語に変換する4つのステップを徹底解説

4. プログラムの実行

  • 「ローダ」は、実行可能になったプログラムをメモリに読み込むソフトウェアです。
  • 実行中、プログラムはユーザーからデータを受け取り、それを処理して結果を出力します。

Cプログラムを機械語に変換する4つのステップを徹底解説

サンプルコード①:3つの数値の平均を求める

#include<stdio.h>
int main(){
    int a,b,c,d; /* 4つの変数を宣言 */
    float e;
    printf("Enter values of a,b,c:");
    scanf("%d,%d,%d",&a,&b,&c); /* キーボードから3つの値を入力 */
    d=a+b+c;
    e=d/3;
    printf("Average=%f",e); /* 結果を表示 */
    return 0;
}

実行結果:

Enter values of a,b,c :2,4,5
Average=3.000000

※変数dはint型のため、d/3は整数除算になります。小数点以下まで正確な平均を求めたい場合は、e=d/3.0; のように記述するとよいでしょう。

サンプルコード②:円の円周を求める

#include <stdio.h>
#define PI 3.1415 /* PIの値を定義 */
main (){
    float c,r;
    printf("Enter radius of circle r=");
    scanf("%f",&r);
    c=2*PI*r;
    printf("Circumference of circle c=%f", c);
}

実行結果:

Enter radius of circle r=5.6
Circumference of circle c=35.184799
  1. C言語でキューに要素を挿入する方法を徹底解説!基本概念からサンプルコードまで

    データ構造とは、データを体系的かつ効率的に整理・格納するための仕組みです。データ構造は、その構成方法によって大きく以下の2種類に分類できます。線形データ構造 − データが一直線上に順序立てて配置される構造です。例として、配列、構造体、スタック、キュー、連結リストなどが挙げられます。非線形データ構造 − データが階層的・網目的に配置される構造です。例として、木(ツリー)、グラフ、集合、テーブルなどが挙げられます。キュー(Queue)とはキューは線形データ構造の一つで、後端(リア/rear)から要素を挿入し、前端(フロント/front)から要素を削除するという特徴を持っています。キューにおけるデー

  2. C言語のシフト演算とは?左シフト・右シフト・補数の基本をわかりやすく解説

    問題 C言語を使用して、ある数値に対する左シフト・右シフト・補数(ビット反転)を求める簡単なプログラムを作成するには、どのようにすればよいのでしょうか。 解決方法 左シフト(<<) 変数の値を1ビットだけ左へシフトすると、その値は2倍になります。「a × 2」を計算したのと同じ結果です。 例:a = 10 の場合、a << 1 = 20 右シフト(>>) 変数の値を1ビットだけ右へシフトすると、その値は元の半分になります。「a ÷ 2」の整数除算と同じ結果です。 例:a = 10 の場合、a >> 1 = 5 サンプルプログラム 以下は、シ