SAK 図書館
パソコン基礎知識 C 言語編 (その四) 基本事項、ユーザ関数、ローカル変数
■基本事項
・構文には C++、JAVA、Perl と同じく大文字小文字の厳密な区別がある。
従って、i と I は別の変数である。
また、組み込み関数など大文字小文字を正確に記述すること。
・パラメタは VB とは違い、値渡しである。
従って、ユーザ関数内で引数を変更しても呼んだ側の変数の値は変わらない。
ほとんどのコンパイラは、値渡しの引数を変更しようとするとエラーを出す。
但し、ポインタを渡す場合は、アドレス渡しと同じことになるので注意する。
・C のコンパイラには、条件コンパイル指定できるものがある。
#define PGM_DBG 1 //デバッグ 1、ノーマル 0
#ifndef PGM_DBG
// デバッグ時に動作するコード
#else
// ノーマル時に動作するコード
#endif
■ユーザ関数
int userfunction(int a, int *b)
{
int i;
コード...
return(returncode);
}
** 戻り値がないものや、引数がないものは void を使用します。
** { ... } 内で宣言した変数はローカル変数となります。
** return には戻り値を渡すことができます。
■検証サンプルコード
/*
========================================================================
グローバル、ローカル変数動作確認
========================================================================
proj0003.c version 1.00 Copyright(C) 2001 Y.SAK
*/
// インクルードヘッダ
#include <stdio.h>
// グローバル変数
int a = 100;
int b = 200;
// 関数プロトタイプ宣言
int main(void);
int test(int p1, int *p2);
/*
========================================================================
メイン
========================================================================
*/
int main(void)
{
int b = 300;
int c = 400;
int d;
d = test(b, &c);
printf("-- グローバル、ローカル変数動作確認 --\n");
printf("グローバル a = %d\n", a);
printf("メイン ローカル b = %d\n", b);
printf("メイン ローカル c = %d\n", c);
printf("メイン ローカル d = %d\n", d);
return(0);
}
/*
========================================================================
テスト
========================================================================
*/
int test(int p1, int *p2)
{
int b = 111;
int c = 222;
*p2 = 333;
c = a + p1;
return(c);
}
【実行結果】
-- グローバル、ローカル変数動作確認 --
グローバル a = 100
メイン ローカル b = 300
メイン ローカル c = 333
メイン ローカル d = 400
** グローバル変数は、どこでも参照、更新できる。
** 同じ変数名の場合、ローカル変数の方が優先度が高い。
** ユーザ関数 test() の中で b = 111 していますが、これは test() のロー
カル変数なので、グローバルの b には影響しない。
また、ユーザ関数の外部からは、ローカル変数は参照できません。
test() が return で終了すると test() のローカル変数は消滅します。
ローカル変数を持続させる場合は、static 宣言します。
** *p2 は、ポインタ渡しです。アドレス渡しの c を操作しているのと同じこ
とですので、main() の c は変更されてしまいます。
** 関数内で return の戻り値にローカルの c を指定しているので、main()
の d に代入されて 400 になります。
関数の考えた方やグローバル、ローカル変数のスコープなど、他の言語と共通の
概念ですが、C 言語の場合、標準は値渡し、ポインタと言うもの、引数のスタッ
クが標準では VB と逆など注意しておくと良いです。
■パソコン基礎知識 C 言語編資料
■プログラミング言語資料
■パソコン基礎知識 ハード編資料
■パソコン基礎知識 画像編資料
■パソコン基礎知識 Windows 編資料
■コンピュータシステム導入編資料