當前位置:首頁 » 編程語言 » c語言staticextern

c語言staticextern

發布時間: 2022-11-08 01:20:08

❶ static在c語言中是什麼意思

寫在局部變數前面表示變數是靜態變數,函數調用結束後變數不回收。

寫在全局變數前面,表示靜態全局變數,該變數只能在本文件中訪問,不可以被其餘地方extern。

static 出現在不同的地方含義不同的。

如果是在函數之外使用,表示該對像在此文件中是全局可訪問的,在文件之外是不可訪問的。

如果出現在函數內部,則表示該變數不是自動變數,它是一個可以初始化的變數(如果不進行顯式初始化,默認值是0)。改變了它的值以後,函數結束時它的值也會保留。

(1)c語言staticextern擴展閱讀:

static int n; //定義靜態全局變數改為int n; //定義全局變數

再次編譯運行程序,細心體會全局變數和靜態全局變數的區別。

全局變數是不顯式用static修飾的全局變數,全局變數默認是有外部鏈接性的,作用域是整個工程,在一個文件內定義的全局變數,在另一個文件中,通過extern 全局變數名的聲明,就可以使用全局變數。

全局靜態變數是顯式用static修飾的全局變數,作用域是聲明此變數所在的文件,其他的文件即使用extern聲明也不能使用。

❷ Static是什麼意思啊,在C程序裡面

static可應用於應用於內部變數、外部變數和函數。應用於內部變數時,其作用是用來指定變數的存儲類別為靜態變數。應用於外部變數和函數時,其作用是限制變數或函數的作用范圍僅限於外部變數或函數所在的源文件。

1、在整個程序運行的過程中,無論靜態內部變數所在的函數被調用了多少次,靜態內部變數只運行一次初始化,即在程序運行時完成的。

2、在函數的兩次調用期間,靜態內部變數所在存儲單元不被釋放,因而當前次函數調用執行時其值會被保存下來,下次調用時該值依然存在。即靜態內部變數的值在從一次函數調用到下一次函數調用到下一次函數調用到下一次函數調用之間保持不變。

3、 默認情況下,外部變數的作用域是從定義變數的位置到所在源文件的末尾。

一、函數分為內部函數和外部函數

當一個源程序由多個源文件組成時,C語言根據函數能否被其它源文件中的函數調用,將函數分為內部函數和外部函數。

1、內部函數(又稱靜態函數)

如果在一個源文件中定義的函數,只能被本文件中的函數調用,而不能被同一程序其它文件中的函數調用,這種函數稱為內部函數。

定義一個內部函數,只需在函數類型前再加一個「static」關鍵字即可,如下所示:

static 函數類型 函數名(函數參數表){……}

關鍵字「static」,譯成中文就是「靜態的」,所以內部函數又稱靜態函數。但此處「static」的含義不是指存儲方式,而是指對函數的作用域僅局限於本文件。

使用內部函數的好處是:不同的人編寫不同的函數時,不用擔心自己定義的函數,是否會與其它文件中的函數同名,因為同名也沒有關系。

2、外部函數

外部函數的定義:在定義函數時,如果沒有加關鍵字「static」,或冠以關鍵字「extern」,表示此函數是外部函數:

[extern] 函數類型 函數名(函數參數表){……}

調用外部函數時,需要對其進行說明:

[extern] 函數類型 函數名(參數類型表)[,函數名2(參數類型表2)……];

二、C語言是一門面向過程、抽象化的通用程序設計語言,廣泛應用於底層開發。C語言能以簡易的方式編譯、處理低級存儲器。C語言是僅產生少量的機器語言以及不需要任何運行環境支持便能運行的高效率程序設計語言。

盡管C語言提供了許多低級處理的功能,但仍然保持著跨平台的特性,以一個標准規格寫出的C語言程序可在包括一些類似嵌入式處理器以及超級計算機等作業平台的許多計算機平台上進行編譯。

(2)c語言staticextern擴展閱讀:

static的作用

在C語言中,static的字面意思很容易把我們導入歧途,其實它的作用有三條。

1、最重要的一條:隱藏。

同時編譯多個文件時,所有未加static前綴的全局變數和函數都具有全局可見性。

加了static,就會對其它源文件隱藏。例如在a和msg的定義前加上static,main.c就看不到它們了。利用這一特性可以在不同的文件中定義同名函數和同名變數,而不必擔心命名沖突。Static可以用作函數和變數的前綴,對於函數來講,static的作用僅限於隱藏,而對於變數,static還有下面兩個作用。

2、static的第二個作用是保持變數內容的持久。存儲在靜態數據區的變數會在程序剛開始運行時就完成初始化,也是唯一的一次初始化。共有兩種變數存儲在靜態存儲區:全局變數和static變數,只不過和全局變數比起來,static可以控制變數的可見范圍,說到底static還是用來隱藏的。

3、static的第三個作用是默認初始化為0。其實全局變數也具備這一屬性,因為全局變數也存儲在靜態數據區。在靜態數據區,內存中所有的位元組默認值都是0x00,某些時候這一特點可以減少程序員的工作量。比如初始化一個稀疏矩陣,我們可以一個一個地把所有元素都置0,然後把不是0的幾個元素賦值。

如果定義成靜態的,就省去了一開始置0的操作。再比如要把一個字元數組當字元串來用,但又覺得每次在字元數組末尾加』』太麻煩。如果把字元串定義成靜態的,就省去了這個麻煩,因為那裡本來就是』』。

最後對static的三條作用做一句話總結。首先static的最主要功能是隱藏,其次因為static變數存放在靜態存儲區,所以它具備持久性和默認值0。

參考資料來源:

網路-static函數

網路-c語言

❸ 在C語言中,extern的作用是什麼

在定義函數時,如果沒有加關鍵字「static」,或冠以關鍵字「extern」,表示此函數是外部函數:
[extern]
函數類型
函數名(函數參數表)
{……}
調用外部函數時,需要對其進行說明:
[extern]
函數類型
函數名(參數類型表)[,函數名2(參數類型表2)……];
[案例]外部函數應用。
(1)文件mainf.c
main()
{
extern
void
input(…),process(…),output(…);
input(…);
process(…);
output(…);
}

❹ C語言中變數存儲static和extern兩個關鍵字的作用分別是什麼

在C語言中,static可以用來修飾局部變數,全局變數以及函數。在不同的情況下static的作用不盡相同。

(1)修飾局部變數

一般情況下,對於局部變數是存放在棧區的,並且局部變數的生命周期在該語句塊執行結束時便結束了。但是如果用static進行修飾的話,該變數便存放在靜態數據區,其生命周期一直持續到整個程序執行結束。但是在這里要注意的是,雖然用static對局部變數進行修飾過後,其生命周期以及存儲空間發生了變化,但是其作用域並沒有改變,其仍然是一個局部變數,作用域僅限於該語句塊。

在用static修飾局部變數後,該變數只在初次運行時進行初始化工作,且只進行一次。

如:

程序執行結果為: 2

3

說明在第二次調用fun()函數時,a的值為2,並且沒有進行初始化賦值,直接進行自增運算,所以得到的結果為3.

對於靜態局部變數如果沒有進行初始化的話,對於整形變數系統會自動對其賦值為0,對於字元數組,會自動賦值為''.

(2)修飾全局變數

對於一個全局變數,它既可以在本源文件中被訪問到,也可以在同一個工程的其它源文件中被訪問(只需用extern進行聲明即可)。

如:

有file1.c

int a=1;

file2.c

#include<stdio.h>

extern int a;

int main(void)

{

printf("%d",a);

return 0;

}

則執行結果為 1

但是如果在file1.c中把int a=1改為static int a=1;

那麼在file2.c是無法訪問到變數a的。原因在於用static對全局變數進行修飾改變了其作用域的范圍,由原來的整個工程可見變為本源文件可見。

(3)修飾函數

用static修飾函數的話,情況與修飾全局變數大同小異,就是改變了函數的作用域。

extern關鍵字

在C語言中,修飾符extern用在變數或者函數的聲明前,用來說明「此變數/函數是在別處定義的,要在此處引用」。
在上面的例子中可以看出,在file2中如果想調用file1中的變數a,只須用extern進行聲明即可調用a,這就是extern的作用。在這里要注意extern聲明的位置對其作用域也有關系,如果是在main函數中進行聲明的,則只能在main函數中調用,在其它函數中不能調用。其實要調用其它文件中的函數和變數,只需把該文件用#include包含進來即可,為啥要用extern?因為用extern會加速程序的編譯過程,這樣能節省時間。

❺ C語言中有哪些存儲類型

自動,靜態,外部,寄存在函數體內聲明的變數在默認情況下都是auto存儲類型

在代碼塊之間傳遞信息的一種方法就是使用外部變數。當一個變數在函數的外部被聲明時,安的存儲空間是永久分配的,安人存儲類型是extren.外部變數的聲明看上去和函數或代碼塊內部所聲明的變數一樣。外部變數對於它之後的所有函數都有效。在代碼塊或函數後,外部變數仍然存在。

static的基本用途是允許一個局部變數在重新進入代碼塊時能夠保持原來的值。這和自動變數形成了鮮明的對比,自動變數在代碼塊時會被銷毀,再次進入這個代碼塊時,它必須重新進行初始化。

register存儲類型告訴編譯器相關的變數應該改量存儲在高速度的寄存器中。使用register存儲類型的目的一般是為了提高執行速度,但是,register聲明只是向編譯器所提出的「建議」,並非強制要求

❻ c語言中static說明是什麼意思

在C語言中,static關鍵字的作用如下:

1、在修飾變數的時,static修飾的靜態局部變數只執行一次,而且延長了局部變數的生命周期,直到程序運行結束以後才釋放。

2、static修飾全局變數的時,這個全局變數只能在本文件中訪問,不能在其它文件中訪問,即便是extern外部聲明也不可以。

3、static修飾一個函數,則這個函數的只能在本文件中調用,不能被其他文件調用。Static修飾的局部變數存放在全局數據區的靜態變數區。

(6)c語言staticextern擴展閱讀:

static關鍵字在C語言、C++、java中的作用有著相似之處,但也存在差異:

一、C++的static用法:

1、面向過程程序設計中的static和面向對象程序設計中的static。前者應用於普通變數和函數,不涉及類;後者主要說明static在類中的作用。

2、在類中,static可以用來修飾靜態數據成員和靜態成員方法

靜態數據成員

(1)靜態數據成員可以實現多個對象之間的數據共享,它是類的所有對象的共享成員,它在內存中只佔一份空間,如果改變它的值,則各對象中這個數據成員的值都被改變。

(2)靜態數據成員是在程序開始運行時被分配空間,到程序結束之後才釋放,只要類中指定了靜態數據成員,即使不定義對象,也會為靜態數據成員分配空間。

(3)靜態數據成員既可以通過對象名引用,也可以通過類名引用。

靜態成員函數

(1)靜態成員函數和靜態數據成員一樣,他們都屬於類的靜態成員,而不是對象成員。

(2)非靜態成員函數有this指針,而靜態成員函數沒有this指針。

(3)靜態成員函數主要用來方位靜態數據成員而不能訪問非靜態成員。

二、java的static用法:

1、聲明為static的變數稱為靜態變數或類變數。可以直接通過類名引用靜態變數,也可以通過實例名來引用靜態變數,但最好採用前者,因為後者容易混淆靜態變數和一般變數。

2、聲明為static的方法稱為靜態方法或類方法。靜態方法可以直接調用靜態方法,訪問靜態變數,但是不能直接訪問實例變數和實例方法。靜態方法中不能使用this關鍵字,因為靜態方法不屬於任何一個實例。

參考資料來源:網路-static(計算機高級語言)

❼ C語言里的static和extern的作用是什麼

假如有三個文件:a.h, a.c, main.c
在文件a.c中定義一個全局變數和函數:
int i = 213;
void print(void) { printf("print in a.c"); }
在文件a.h中聲明這個全局變數和函數:
extern int i;// 加extern聲明而不定義,指明這個變數在某處已定義,此處只是做一個說明
extern void printf(void); // 函數原型即是聲明,所以此處可以不用加extern明確這是聲明
在文件main.c中:
#include 「a.h」
int main()
{

printf("%d\n", i); // 直接使用i
print(); // 直接調用print()
}
---
如果將文件a.c中相關定義改為
static int i = 213;
static void print(void) { printf("print in a.c"); }
文件a.h與main.c中內容不變
此時編譯出錯,報告找不到print()函數,找不到i,這是因為static限制print()和i只能在a.c中使用。
===
如果用static修飾局部變數,則該局部變數將擁有全局生命周期,即在程序執行期間都存在,且其值為上一次使用後的值。
int print(void)
{
static int i = 0;

printf("%d",i++);

}
不加static,每次調用print(),輸出結果都是0
加上static,每次調用printf(), 輸出結果都不同,即:0,1,2,3……

❽ c語言extern跟static可以一起用嗎

不能。extern修飾全局變數和函數,被修飾的變數和函數可以在別的文件里使用。

而static修飾的變數和函數作用范圍僅限於定義它的文件內部。
兩者是沖突的。

❾ C語言中定義數組時,前面的static、auto、extern三種存儲類別有什麼作用

static 有好幾種用法,比如說屏蔽函數聲明,避免污染全局變數表。。。在函數內部則是讓局部變數放在靜態存儲區。。。

熱點內容
微信里的密碼和賬號在哪裡 發布:2025-01-11 22:46:04 瀏覽:750
java字元串個數統計 發布:2025-01-11 22:45:05 瀏覽:541
完美國際2捏臉資料庫 發布:2025-01-11 22:45:04 瀏覽:279
php淘寶互刷平台源碼 發布:2025-01-11 22:43:49 瀏覽:215
劍俠情緣緩存怎麼清理 發布:2025-01-11 22:33:56 瀏覽:316
win7旗艦版怎麼設置密碼 發布:2025-01-11 22:21:09 瀏覽:144
被害人訪問 發布:2025-01-11 22:06:24 瀏覽:366
朋友圈上傳長視頻方法 發布:2025-01-11 22:01:41 瀏覽:357
我的世界ice伺服器被炸罰款 發布:2025-01-11 21:54:36 瀏覽:725
linuxphpini配置 發布:2025-01-11 21:54:35 瀏覽:481