1. 程式人生 > >【C++】多檔案專案extern的用法

【C++】多檔案專案extern的用法

目錄

extern定義與使用

全域性變數和函式重定義

專案生成過程


extern定義與使用

extern告訴編譯器在某一個cpp檔案中,存在該函式或該全域性變數的定義。

(1)宣告外部函式;

(2)宣告外部全域性變數。

程式功能:輸入半徑,求面積。

main.cpp

#include "stdafx.h"
#include "stdio.h"

extern double get_area(double r);
extern int a; //測試外部全域性變數

int main()
{
	double r;
	printf("enter r:");
	scanf("%lf", &r);

	double area = get_area(r);
	printf("area:%lf", area);

    return 0;
}

other.cpp

#include "stdafx.h"

int a = 10;

double get_area(double r)
{
	double area = 3.14 * r * r;
	return area;
}

一定要注意一點,extern不是告訴你在其他檔案,而是告訴你在某個cpp檔案中,比如在本檔案中使用也是可以的。具體事例如下:

#include "stdafx.h"
#include "stdio.h"

extern int sum(int a, int b);

int main()
{

	printf("sum:%d", sum(1, 2));

    return 0;
}

int sum(int a, int b) 
{
	return a + b;
}

全域性變數和函式重定義

全域性變數和全域性函式,在所有cpp檔案中都不能重複。否則就會報重定義錯誤。請看下面這個函式名重複的例子:

main.cpp

#include "stdafx.h"
#include "stdio.h"

//extern double get_area(double r);
extern int a;

double get_area(double r)
{
	double area = 3.14 * r * r;
	return area;
}

int main()
{
	double r;
	printf("enter r:");
	scanf("%lf", &r);

	double area = get_area(r);
	printf("area:%lf", area);

    return 0;
}

other.cpp

#include "stdafx.h"

int a = 10;

double get_area(double r)
{
	double area = 3.14 * r * r;
	return area;
}

專案生成過程

(1)編譯Compile是逐個cpp檔案進行的。

沒有順序之分,誰先編譯沒有關係。你只要在cpp檔案中宣告extern,就可以呼叫它。但編譯器並不會檢車是否真的存在這個符號。

(2)在連結階段。

檢查所有的符號名是否重複;

檢查所有的外部符號是否有定義。