本博客僅記錄自己在代碼中,多個源文件共享或限制全局變量、函數作用域的常用用法。
擴展全局變量、函數作用域
1. 多個源文件使用其中一個源文件的外部變量
外部變量是在函數外部定義的全局變量,它的作用域從定義開始,到本程序文件的末尾。有時候希望若干個程序文件都可以使用該外部變量,會用extern擴展其作用域。
例如程序包含兩個源文件,在兩個源文件中都要用到同一個外部變量a,做法爲:在任意一個源文件中定義外部變量a,而在另一文件中用extern對a作“外部變量申明”,即“extern a”。
文件file1.c
#include <stdio.h>
int a = 1; //定義外部變量
int fun1()
{
printf("%d",a);
return 0;
}
文件file2.c
#include <stdio.h>
extern int a; // 擴展作用域到本文件
int fun2()
{
printf("%d",2*a);
return 0;
}
在C語言和C++混編的情況下,如果cpp源文件需要使用c文件中的全局變量,還需要在cpp文件中使用extern "C"關鍵字,否則編譯不成功:
文件file3.cpp
#include <stdio.h>
extern "C"
{
extern int a;
}
int main()
{
printf("%d",3*a);
return 0;
}
2. 多個源文件使用其中一個源文件的函數
有多種方法,我常用的方法是:
Step1: 在file1.c中定義該函數
文件file1.c
#include <stdio.h>
int a = 1; //定義外部變量
int fun1()
{
printf("%d",a);
return 0;
}
Step2: 創建file1.h文件,加入int fun1();聲明
文件file1.h
int fun1();
Step3: 在file2.c中引用該頭文件#include “file1.h”,即可調用該函數。
文件file2.c
#include "file1.h"
int main()
{
fun1();
return 0;
}
限制全局變量、函數作用域
只需要在前加static修飾即可:
文件file2.c
#include<stdio.h>
static int a = 1; //定義外部變量
static int fun1()
{
printf("%d",a);
return 0;
}