C語言:擴展或限制全局變量、函數作用域方法

本博客僅記錄自己在代碼中,多個源文件共享或限制全局變量、函數作用域的常用用法。

擴展全局變量、函數作用域

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章