C言語におけるグローバル変数と静的変数の初期化方法をわかりやすく解説
C言語では、グローバル変数と静的変数(static変数)は必ず定数値で初期化する必要があります。これは、これらの変数が静的記憶域期間(static storage duration)を持つため、プログラムの実行開始前、つまりmain()関数が呼び出される前に値が確定していなければならないからです。
もし定数値以外(変数や関数の戻り値など)で初期化しようとすると、コンパイル時にエラーが発生します。
正しい初期化のサンプルコード
以下は、グローバル変数と静的変数を定数で初期化するプログラムの例です。
#include <stdio.h>
int a = 5;
static int b = 10;
int main() {
printf("The value of global variable a : %d", a);
printf("\nThe value of global static variable b : %d", b);
return 0;
}実行結果
上記プログラムを実行すると、次のような出力が得られます。
The value of global variable a : 5 The value of global static variable b : 10
プログラムの解説
このプログラムでは、グローバル変数aに「5」、静的変数bに「10」という定数値をそれぞれ設定しています。どちらも定数で初期化されているため、プログラムは問題なくコンパイルされ、期待どおりに動作します。
なお、明示的に初期化しなかった場合、静的記憶域期間を持つ変数は自動的にゼロで初期化されるという仕様もあります。
定数以外で初期化した場合のエラー例
一方、定数を使用せずに関数の戻り値などで初期化しようとすると、エラーになります。以下のプログラムを見てみましょう。
#include <stdio.h>
int func() {
return 25;
}
int main() {
static int a = func();
printf("%d ", a);
}このプログラムをコンパイルすると、次のエラーが発生します。
error: initializer element is not constant (初期化子の要素が定数ではありません)
まとめ
このように、C言語においてグローバル変数および静的変数は、実行前に値が決まっている必要があるため、必ず定数式でのみ初期化しなければなりません。関数の戻り値や実行時にしか決まらない値で初期化したい場合は、変数を宣言した後にmain()関数内などで代入する方法を採用しましょう。
-
Android Studioで静的変数(static)を使う方法と適切な活用場面を解説
静的変数(static変数)は、クラスのインスタンスを生成しなくてもアクセスできる特殊な変数です。すべてのインスタンス間で値が共有され、プログラムの実行中に一度だけメモリへ割り当てられます。Androidアプリ開発では、ログ出力用のタグ定数やアプリ全体で共通する設定値の管理など、さまざまな場面で活用されています。この記事では、Android Studioで静的変数を宣言し、実際に使用するまでの手順をサンプルコードとともに分かりやすく解説します。静的変数とは?静的変数はクラスそのものに属し、ClassName.variableName の形式でどこからでもアクセスできます。特に static f
-
Bash変数チュートリアル – 基本からグローバル変数・ローカル変数まで学べる6つの実用例
Bash変数は、プログラムの実行期間中に必要となる情報を一時的に保存しておくための仕組みです。本記事はBashチュートリアルシリーズの一篇で、他のプログラミング言語と同様にBashでも変数を利用できることを踏まえ、基本的な使い方からグローバル変数とローカル変数の違いまでを、6つの実用的なサンプルを通じて解説します。 Bash変数の基本構文 変数の定義は非常にシンプルで、次の書式に従います。 VARNAME=VALUE 注意: 変数へ代入する際は、「=」記号の前後にスペースを入れてはいけません。「VAR=VALUE」のように書けば、シェルは「=」を代入記号として認識し、この行を変数への代入とし