目錄
- 一.簡介
- 二.extern 修飾變數
- 1.在單檔案中使用 extern
- 2.在多檔案中使用 extern
- 三.extern 修飾函式
- 四.猜你喜歡
零基礎 C/C++ 學習路線推薦 : C/C++ 學習目錄 >> C 語言基礎入門
一.簡介
如果一個變數使用用關鍵字 extern ,對該變數作“外部變數宣告”,表示該變數是一個已經定義的外部變數,有了此宣告,就可以從“宣告”處起,合法地使用該外部變數,
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 extern
//@Time:2021/07/18 07:30
//@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
/******************************************************************************************/
/* file1.c */
int x = 10;
int func1();
/* file2.c */
extern int x ; //該變數是已經在外部定義,此處只做一個宣告
extern int func1();//該函式是已經在外部定義,此處只做一個宣告
int main(void)
{
printf("x = %d",x); // x = 10
fun1();
return 0;
}
二.extern 修飾變數
1.在單檔案中使用 extern
首先我們回到全域變數中有講到:在所有函式外部定義的變數稱為全域變數(Global Variable),它的作用域默認是從定義變數的位置到本源檔案結束都有效,
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 extern
//@Time:2021/07/18 07:30
//@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
/******************************************************************************************/
#include <stdio.h>
void func1(){
x += 10;
y += 20;
printf("函式:%s 中 x = %d y = %d \n",__FUNCTION__,x,y);
}
int x = 10;
int y = 20;
void func2(){
x += 10;
y += 20;
printf("函式:%s 中 x = %d y = %d \n",__FUNCTION__,x,y);
}
int main(){
func1();
func2();
printf("函式:%s 中 x = %d y = %d \n",__FUNCTION__,x,y);
return 0;
}
/*
輸出:
main.cpp: In function ‘void func1()’:
main.cpp:6:5: error: ‘x’ was not declared in this scope
6 | x += 10;
| ^
main.cpp:7:2: error: ‘y’ was not declared in this scope
7 | y += 20;
| ^
*/
對于上面的編譯器報錯,我們可以通過 extern 來解決這個問題,示例代碼如下:
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 extern
//@Time:2021/07/18 07:30
//@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
/******************************************************************************************/
#include <stdio.h>
void func1(){
extern int x; //宣告一個外部變數
extern int y; //宣告一個外部變數
x += 10;
y += 20;
printf("函式:%s 中 x = %d y = %d \n",__FUNCTION__,x,y);
}
int x = 10; //全域變數
int y = 20;
void func2(){
x += 10;
y += 20;
printf("函式:%s 中 x = %d y = %d \n",__FUNCTION__,x,y);
}
int main(){
func1();
func2();
printf("函式:%s 中 x = %d y = %d \n",__FUNCTION__,x,y);
return 0;
}
/*
輸出:
函式:func1 中 x = 20 y = 40
函式:func2 中 x = 30 y = 60
函式:main 中 x = 30 y = 60
*/
2.在多檔案中使用 extern
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 extern
//@Time:2021/07/18 07:30
//@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
/******************************************************************************************/
/****max.c****/
#include <stdio.h>
/*定義兩個全域變數*/
int x=10;
int y=20;
int max()
{
return (x > y ? x : y);
}
/***main.c****/
#include <stdio.h>
/*extern 宣告外部變數*/
extern int x ;
extern int y ;
int main(void)
{
printf("x = %d y = %d\n",x,y);
return 0;
}
有了 extern 宣告的外部變數可以直接使用,注意:使用 extern 宣告的外部變數不需要再次初始化,僅僅只是作為一個宣告而已,該變數的定義已經在其他檔案中完成!
三.extern 修飾函式
使用 extern 修飾函式,使用原理和上面 extern 修飾變數類似,有 extern 修飾之后,可以作為一個外部宣告,我們直接呼叫即可;
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 extern
//@Time:2021/07/18 07:30
//@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
/******************************************************************************************/
/****test.c****/
#include <stdio.h>
/*定義函式*/
int test_printf()
{
printf("this func is %s\n",__FUNCTION__);
return 0;
}
/***main.c****/
#include <stdio.h>
/*extern 宣告外部函式*/
extern int test_printf() ;
int main(void)
{
test_printf();
return 0;
}
四.猜你喜歡
- C 語言 陣列下標越界和記憶體溢位區別
- C 語言 使用指標遍歷陣列
- C 語言 指標和陣列區別
- C 語言 指標陣列和陣列指標區別
- C 語言 野指標
- C 語言 函式值傳遞和址傳遞
- C 語言 函式不定長引數
- C 語言 函式指標
- C 語言 指標函式
- C 語言 回呼函式 callback
- C 語言 #pragma once
- C 語言 #include <> 與 #include “” 區別
- C 語言 const 修飾函式引數
- C 語言 const 和 define 區別
- C 語言 #運算子
- C 語言 ##運算子
- C 語言 __VA_ARGS__
- C 語言 ##__VA_ARGS__
- C 語言 函式不定長引數 ##__VA_ARGS__經典案例
- C 語言 va_start / va_end / va_arg 自定義 printf 函式
- C 語言 main 函式
- C 語言 main 函式引數 main(int argc, char *argv[])
- C 語言 區域變數
- C 語言 全域變數
- C 語言 全域變數和區域變數區別
- C 語言 static
- C 語言 extern
未經允許不得轉載:猿說編程 ? C 語言 extern
本文由博客 - 猿說編程 猿說編程 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/303150.html
標籤:C
