C言語の静的関数(static関数)とは?スコープの仕組みと使い方を解説
C言語における静的関数(static関数)とは、そのスコープがオブジェクトファイル内に限定される関数のことです。つまり、static を付けて宣言された関数は、同じソースファイルからコンパイルされたオブジェクトファイル内でのみ参照可能となり、他のファイルから呼び出すことはできません。
関数を静的関数として宣言するには、関数名の前に static キーワードを付けます。
静的関数が他のファイルから呼び出せない例
まず、2つのファイル「first_file.c」と「second_file.c」を使った例を見てみましょう。
first_file.c の内容:
static void staticFunc(void)
{
printf("Inside the static function staticFunc() ");
}second_file.c の内容:
int main()
{
staticFunc();
return 0;
}このコードをコンパイルすると、「undefined reference to staticFunc()」(staticFunc() への未定義参照)というエラーが発生します。これは、staticFunc() が静的関数であり、その可視性が自身のオブジェクトファイル内に限定されているためです。
静的関数の正しい使用例
次に、C言語で静的関数を使用したプログラムの例を示します。
サンプルコード
#include <stdio.h>
static void staticFunc(void){
printf("Inside the static function staticFunc() ");
}
int main()
{
staticFunc();
return 0;
}実行結果
Inside the static function staticFunc()
コードの解説
上記のプログラムでは、staticFunc() は「Inside the static function staticFunc()」というメッセージを出力する静的関数として定義されています。main() 関数から staticFunc() を呼び出しています。このプログラムが正常に動作するのは、静的関数が同じオブジェクトファイル内から呼び出されているためです。
静的関数のメリット
静的関数には以下のような利点があります。
- カプセル化の向上: 関数をファイル内部に隠蔽することで、モジュールの外部公開APIを明確にできます。
- 名前の衝突を防止: 他のファイルで同名の関数が定義されていてもリンクエラーが発生しません。
- コンパイラ最適化: 呼び出し範囲が限定されるため、インライン展開などの最適化が行われやすくなります。
このように、static キーワードを活用することで、C言語でもファイル単位の情報隠蔽を実現し、より安全で保守性の高いコードを書くことができます。
-
JavaScriptの簡潔なアロー関数の書き方と実装例
簡潔なアロー関数とは JavaScriptにおける簡潔な(コンサイス)アロー関数の構文は、次のようになります。 (param1, param2) => param1 + param2 この形式には function キーワードがなく、波括弧 {} で囲まれた関数本体もありません。パラメータと関数本体の間に => を置くだけで成立します。 さらに、パラメータが1つだけの場合は、丸括弧を省略して次のように書くこともできます。 param1 => param1 * 2 主な特徴 functionキーワード不要: 通常の関数宣言よりも短く記述できます。 暗黙のリターン: =>
-
JavaScriptのファーストクラス関数とは?特徴と使い方を実例で解説
ファーストクラス関数(第一級関数)とは? JavaScriptでは、関数もオブジェクトの一種として扱われます。そのため、関数を別の関数の引数(パラメータ)として渡したり、関数の中で別の関数を戻り値として返したりすることが可能です。 このような性質を持つことから、JavaScriptの関数はファーストクラス関数(第一級関数)と呼ばれています。つまり、関数は変数・オブジェクト・配列などに自由に格納できる「値」だということです。 さらに、関数を引数として受け取る、関数を戻り値として返す、あるいはその両方を行う関数は高階関数(Higher Order Function)と呼ばれます。 ファーストクラ