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
ローカル変数および引数とも、グローバル変数と同じ変数名をつけた場合には、グローバル変数が隠蔽され、ローカル変数または引数の内容が参照されます。
変数名の衝突により、コードを書いた人間の意図しない動作が引き起こされてしまいます。
変数名をつけるときは、グローバル変数、ローカル変数、引数で同じ変数名が付与されないよう注意しましょう。
・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。
まだ評価がありません |
表示できるメッセージはありません。