関数の外に変数を宣言
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
