【C++】多檔案專案extern的用法
阿新 • • 發佈:2018-12-04
目錄
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)在連結階段。
檢查所有的符號名是否重複;
檢查所有的外部符號是否有定義。