SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

パソコン基礎知識 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 編資料
■コンピュータシステム導入編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2024 Y.SAK