はじめに

C言語では、同じ変数名を「グローバル変数とローカル変数」の組み合わせと、「グローバル変数と引数」の組み合わせの時に付与可能です。
この際のプログラムの挙動について、説明します。

サンプルコード

以下のようなサンプルコードを用意し、コンパイル→リンクして実行してみます。

C++のコード
#include <stdio.h>

int a;

void setValue1(int a)  /*  グローバル変数と引数で変数名が衝突したとき  */
{
    a=a;
}

void setValue2(int b)  /*  グローバル変数とローカル変数で変数名が衝突したとき  */
{
    int a;

    a=b;
}

void setValue3(int b)  /*  変数名の衝突がないとき  */
{
    a=b;
}

void main()
{
    a=1;
    printf("a=%d\n",a);

    setValue1(2);
    printf("a=%d\n",a);

    setValue2(3);
    printf("a=%d\n",a);

    setValue3(4);
    printf("a=%d\n",a);
}

実行結果

上記のコードの実行結果は以下の通りです。

実行結果
a=1
a=1
a=1
a=4

ローカル変数および引数とも、グローバル変数と同じ変数名をつけた場合には、グローバル変数が隠蔽され、ローカル変数または引数の内容が参照されます。

結論

変数名の衝突により、コードを書いた人間の意図しない動作が引き起こされてしまいます。
変数名をつけるときは、グローバル変数、ローカル変数、引数で同じ変数名が付与されないよう注意しましょう。


あなたの探し物は見つかりましたか?
まさにこれだ
参考になった
ちょっと違う
これじゃない

何かメッセージがあればお願いします

このメッセージを非公開にする

ご注意

・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。


まさにこれだ
28 (76%)
参考になった
3 (8%)
ちょっと違う
3 (8%)
これじゃない
3 (8%)

表示できるメッセージはありません。