😸

C言語のあれこれ2(変数と定数の作成方法)

2024/05/26に公開

はじめに

以下の記事の続きになります。
C言語のあれこれ1(Hello Worldの解読)

こちらの記事から
実際に個人でコードを作成することができるように細かく説明するステップになります。

以下の順番で作成していきます。

  • 変数と定数の作成方法 <=今回の記事
  • 基本的な値型の種類と構造体の作成方法
  • 関数の作成方法
  • 計算するための演算子の説明
  • 条件に関する演算子と条件分岐、繰り返し文の作成方法
  • 配列を伴わないポインターの使用方法
  • 配列を伴ったポインターの使用方法

本編

ここでは変数・定数の作成方法を記述します

変数と定数

一度、次の二次関数を思い浮かべてください

y = 2x + 1

こちらは一般的な二次関数になります。

この時xとyの値は定まっていません。
そのため平面上では線を描くことができます。
それはxの値に1を入れたり2を入れたりするとyの値が3や5と確定するためです。

プログラムでも値が定まらず、途中までの計算を保存したいことがたびたび現れます。
そこで値を一時的にもしくは永続的に保持し利用して管理するために利用されるのが"変数"です。

対義語として値が変わらない容器を"定数"といいます。
こちらは必ずこの値しか利用しないときに限り利用されます。

定数の作成方法

C言語には明確に定数と呼ばれるかきかたがありません。

Javaの場合はfinal,C++やJavaScriptの場合はconst,C#の場合もreadonlyとなります。
※これらはそれぞれの言語で変数の作成する際に修飾子として付けます。

その代わりにC言語とC++言語にはマクロと呼ばれるものがあります。
#defineから始まるものです。

こちらの機能の詳細は後ほど説明します。
定義の仕方は以下になります。

#define TEST_VALUE 0

実際に利用する場合は作成しているコードに以下のように組み込みます。

int main()
{
    return TEST_VALUE;
}

上記のように行うとさらにコンパイルするときに以下に置き換えられます。

int main()
{
    return 0;
}

変数の作成方法

変数の作成には二種類あります。

修飾子 型名(構造体名) 変数名;

//C言語のバージョンが上がり、途中から追加されました。//

修飾子 型名(構造体名) 変数名 = 初期値;

基本的には後者の作成方法が推奨されます。初期値を入れないとどんな値が入るかわからないためです。

グローバル変数

C言語はスコープという概念があります。
スコープは特定の場所でのみ利用可能なものの区切りを指します。

グローバル変数はそのスコープを無視してこのアプリケーションが終わるまで残る変数になります。

int g_value = 0;

int main()
{
    return 0;
}

ローカル変数

ローカル変数は特定の場所でのみ利用する一時的な変数になります。
基本的には作成された{}の間でのみ利用可能です。

int main()
{
    int l_value = 0;

    //特殊例1:条件分岐や繰り返し文を利用するときの特殊例//
    //こちらの例では以下の行でしかl2_value変数を利用ができません。//
    if(1)int l2_value = 0;

    //特殊例2:関数を利用した時の特殊例//
    //この関数が終わると変数は解放されます(※ただこの使い方はめったにしません)//
    printf(char* test = "TEST");

    return 0;
}

スタティック変数

変数には様々な属性を付与させることができます。

その一つがスタティック変数と呼ばれるものです。
こちらはローカル変数と違い、変数を作成するとスコープから抜けても解放されなくなります。

int main()
{
    static int s_value = 0;
    return 0;
}

Discussion