Relative Content

Daily Archives: July 4, 2016

6.3 変数の有効範囲

変数の通用範囲 自動変数のことを局所変数、外部変数のことをグローバル変数(大域変数)ともいいます。 変数のスコープの範囲を図で表してみます。 赤色で囲った部分がグローバル変数の有効範囲です。 青色で囲った部分がローカル変数の有効範囲です。 この図ではローカル変数の寿命を関数内と説明しましたが、正確にはブロック内です。 ブロックとは、{}で囲まれている範囲のことを指しています。 記憶クラス Cで扱う記憶領域は一般に、プログラム領域、静的領域、スタック領域、ヒープ領域の 4つに大別されます。 記憶クラスには、4つあり、自動、静的、外部、レジスタがあります。 記憶クラス 記憶領域 スコープ 記憶クラス指定子 自動変数 スタック { } の内側 auto( 不要 ) 静的変数 静的領域 { } の内側* static 外部変数 静的領域 全域 extern** レジスタ変数 レジスタまたはスタック { } の内側 register * { }の外側で宣言された時は、その行以降 ** 他のファイルにある時、externを付け、その変数を宣言(メモリを確保)しているファイルでは何も付けない。 自動変数は使う前に何らかの値を代入します。このことを、初期化するといいます。 静的変数は初期化の式がなくても、コンパイル時に0に初期化されます。 変数の名前 変数は名前を付けなければ、使えません。C言語では、名前(識別子)は、英字または’_’(アンダースコア)で始まり、英数字または’_’が0個以上続くという決まりになっています。’_’一つまたは二つで始まる変数は、システムに密着したデータに使います。例えば、コンパイラのプログラム等で使われます。 変数に名前を付ける時、外部変数は定義されている所から遠い所でも使われるので、その変数の用途を想像できるような名にすることが推奨されています。 例:timetable, itemindex, thisyear 自動変数は通用範囲が狭いので、何の変数かがすぐわかるので、タイピングの手間を省く意味でも、短くて良いとされています。 例:i, j, […]

C code2 (c) Command line arg.

今まで、main 関数へ引数なしを意味する int main(void) と記述、 実は main関数にも引数を渡すことができます。 この main関数に渡す引数のことを「コマンドライン引数」といいます。 コマンドライン引数 main関数へ渡せる引数は、 引数の総個数 引数の文字列を指すポインタの配列 の 2つです。 一般に int main(int argc, char *argv[]) と記述し、 int argc: 引数の総個数(プログラム名も含む) char *argv[]: 引数の文字列を指すポインタの配列を表します。 とりあえず、下の例を見てみましょう。 (例) #include <stdio.h> int main(int argc,char *argv[]) { int i; printf(“引数の総個数 = %d\n”, argc); for (i = 0; i < argc; i++) { printf(“%d番目の引数 = %s\n”, […]