c語言 C語言中,哪種存儲類的作用域與生命周期是不一致的?
C語言中,哪種存儲類的作用域與生命周期是不一致的?局部靜態(tài)變量,作用域是局部的,生命周期是整個過程。靜態(tài)局部變量屬于靜態(tài)存儲模式,具有以下特點:](1)靜態(tài)局部變量在函數(shù)中定義,但調用時不存在,退出函
C語言中,哪種存儲類的作用域與生命周期是不一致的?
局部靜態(tài)變量,作用域是局部的,生命周期是整個過程。
靜態(tài)局部變量屬于靜態(tài)存儲模式,具有以下特點:
](1)靜態(tài)局部變量在函數(shù)中定義,但調用時不存在,退出函數(shù)時消失,如自動變量。靜態(tài)局部變量總是存在的,也就是說,它的生命周期就是整個源程序。
(2)雖然靜態(tài)局部變量的生存期是整個源程序,但其作用域仍然與自動變量相同,即只能在定義變量的函數(shù)中使用。退出函數(shù)后,雖然變量繼續(xù)存在,但不能使用。
既然C語言函數(shù)的局部變量會被釋放,那為什么函數(shù)還可以把它return返回呢?
看了下面兄弟的回信,我們只能說他們一半是對的。
真正的原因是abi(應用程序二進制接口)。
ABI定義了與系統(tǒng)交互的細節(jié),如數(shù)據類型、大小和對齊方式;調用約定(控制函數(shù)的參數(shù)傳遞方向、可變長度處理、堆棧清理體以及如何接受返回值等);系統(tǒng)調用的編碼以及應用程序如何對操作系統(tǒng)進行系統(tǒng)調用系統(tǒng);以及采用完整ABI操作系統(tǒng)基本格式、程序庫等的第二代對象文件。完整的ABI,如英特爾二進制兼容標準(IBCs),允許支持它的操作系統(tǒng)上的程序在支持此ABI的其他操作系統(tǒng)上運行,而無需修改。
其他ABI標準化細節(jié)包括C名稱修改和同一平臺上編譯器之間的調用約定,但不包括跨平臺兼容性。
至于下面兄弟提到的eax save返回值,這只是X86的ABI規(guī)范。在其他CPU架構平臺(如PowerPC)中,實現(xiàn)是不同的!--在PowerPC中,返回值存儲在R3寄存器中