スポンサーリンク

関数の外に変数を宣言

int型の変数g_numを、sample.cとfunc1.cで共有する場合を
サンプルコードにしてみたいと思います

まず、sample.cの関数の外で、int型の変数g_numを宣言します。
同時に、初期化も行っておきます。

$ cat sample.c 
#include <stdio.h>
#include "func1.h"

int g_num = 9;

int main(){
	func1();
	
	printf("main : g_num=%d\n", g_num);
	
	return 0;
}

スポンサーリンク

別ファイルに共有したい変数をextern宣言

続いて、func1.cの関数の外に、g_numをint型でextern宣言します。
これで、main()とfunc1()でg_numが共有できます。

$ cat func1.c
#include <stdio.h>
#include "func1.h"

extern int g_num;

void func1(){
	printf("func1: g_num=%d\n", g_num);
	g_num++;
	
	return;
}

下記がfunc1.hになります。
$ cat func1.h
#ifndef FUNC1_H
#define FUNC1_H

void func1();

#endif

コンパイルして実行してみます。

main.cで初期化したg_numが、func1()内でも共有されています。
また、func1()で変更されたg_numが、main()でも引き継がれてるのが確認できます。

$ gcc -o sample sample.c func1.c
$ ./sample 
func1: g_num=9
main : g_num=10

スポンサーリンク