C言語,staticを使用して関数の参照可能な範囲を制限する

スポンサーリンク

鍛錬 841

C言語,staticを使用して関数の参照可能な範囲を制限する

関数を別ファイルから呼び出せないようにするには、static を使用します。
 
使用方法は、以下に示す通りです。

static 関数名()
 
スポンサーリンク

プログラム

以下は、関数に static を付加する場合と付加しない場合についての挙動を確認しています。

static を使用しない場合

以下は、関数を static にしていないプログラム、print_hello.c です。

 
以下は、上記の PrintHello()関数を呼び出すプログラム、sample.c です。

// include
#include <stdio.h>

// prototype
void PrintHello(void);

// main
int main(void)
{
	PrintHello();
	
	return 0;
}

 
以下は、上記2つのファイルをコンパイル後に実行しています。

***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ gcc -Wall -Wextra sample.c print_hello.c -o sample
***@ubuntu:~/***/test/c$ ./sample
Hello, World.

 
上記に示した通り、sample.c から、print_hello.c に記述されている PrintHello()関数を呼び出すことができました。

static を使用する場合

以下は、関数を static にしているプログラム、print_hello.c です。

 
以下は、上記の PrintHello()関数を呼び出すプログラム、sample.c です。

// include
#include <stdio.h>

// prototype
void PrintHello(void);

// main
int main(void)
{
	PrintHello();
	
	return 0;
}

 
以下は、上記2つのファイルをコンパイルしています。

***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ gcc -Wall -Wextra sample.c print_hello.c -o sample
print_hello.c:4:13: warning: ‘PrintHello’ defined but not used [-Wunused-function]
 static void PrintHello(void)
             ^~~~~~~~~~
/tmp/ccKPHlxz.o: 関数 `main' 内:
sample.c:(.text+0x5): `PrintHello' に対する定義されていない参照です
collect2: error: ld returned 1 exit status

 
上記に示した通り、sample.c から print_hello.c に記述されている PrintHello()関数を参照することができないため、コンパイルを実行するとエラーになりました。

スポンサーリンク

シェアする

フォローする