在函數(shù)內(nèi)部或復(fù)合語句中定義的變量,稱為局部變量(local variable)。
站在用戶的角度思考問題,與客戶深入溝通,找到西固網(wǎng)站設(shè)計與西固網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、主機域名、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋西固地區(qū)。(1)在一個函數(shù)內(nèi)部定義的變量;
(2)函數(shù)的形式參數(shù);
(3)在某個復(fù)合語句中定義的變量。
a. 局部變量只能定義在它的區(qū)域及其子區(qū)域中使用。
b. 在同一個區(qū)域中不能定義相同名字的變量。
c. 在不同區(qū)域中允許定義相同名字的變量,但本質(zhì)上它們是不同的變量。
d. 如果一個變量所處區(qū)域的子區(qū)域中有同名的變量,則該變量在子區(qū)域無效,有效的是子區(qū)域的變量,稱為定義屏蔽。
在源文件中,但在函數(shù)外部定義的變量,稱為全局變量(global variable),全局變量的有效區(qū)域是從定義變量的位置開始到源文件結(jié)束。
函數(shù)之間數(shù)據(jù)傳遞盡量可以利用全局變量,如此也會導(dǎo)致兩個函數(shù)彼此分不開,違背模塊化的原則,因此結(jié)構(gòu)化程序設(shè)計提倡少用或不用全局變量。
二、作用域C++的實體通常有三類:(1)變量或?qū)ο?;?)函數(shù);(3)類型。
作用域是程序中的一段區(qū)域。在同一個作用域上,C++程序中每個名字都與唯一的實體對應(yīng);如果在不同的作用域上,程序中可以多次使用同一個名字,對應(yīng)不同作用域中的不同實體。
(1)文件作用域;(2)函數(shù)作用域;(3)塊作用域;(4)類型聲明作用域;(5)函數(shù)原型作用域。
實體在作用域內(nèi)可以使用稱為可見(visible),又稱有效??梢姷暮x是指實體在作用域上可以使用。
規(guī)則一:同一個作用域內(nèi)不允許有相同名字的實體,不同作用域的實體可以有相同名字。
規(guī)則二:實體在包含它的作用域內(nèi),從定義或聲明的位置開始,按文件行的順序往后(往下)直到該作用域結(jié)束均是可見的,包含作用域內(nèi)的所有子區(qū)域及其嵌套。
規(guī)則三:若實體A在包含它的作用域內(nèi)的子區(qū)域中出現(xiàn)了相同名字的實體B,則實體A被屏蔽。
規(guī)則四:可以使用extern聲明將變量或函數(shù)實體的可見區(qū)域往前延伸,稱為前置聲明(forward declaration)。
規(guī)則五:在全局作用域中,變量或函數(shù)實體若使用static修飾,則該實體對于其他源文件是屏蔽的,稱為私有的(private)。
三、生命期C++中,每個名字都有作用域,即可以使用名字的區(qū)域,而每個對象都有生命期(lifetimes),即在程序執(zhí)行過程中對象存在的時間。
1. 動態(tài)存儲
程序運行期間,系統(tǒng)為對象動態(tài)地分配存儲空間。存儲空間的分配和釋放是動態(tài)的,或者由函數(shù)調(diào)用來自動分配(自動存儲),或者由程序指令來人工分配釋放(自由存儲),其生命期是整個程序運行期的一部分。
對象不持久地占有存儲空間,釋放后讓出空閑空間給其他對象的分配。
2. 靜態(tài)存儲
對象在整個程序運行期持久占有存儲空間,其生命期與程序運行期相同。其特點是對象的數(shù)據(jù)可以在程序運行期始終保持直到修改為止,或者程序結(jié)束為止,靜態(tài)存儲的分配和釋放在編譯完成時就決定好了。
現(xiàn)代程序設(shè)計的觀點是,除非有必要盡量少地使用靜態(tài)存儲。
3. 自動對象
默認(rèn)情況下,函數(shù)或復(fù)合語句中的對象(包含形參)稱為自動對象,其存儲方式是自動存儲,程序中大多數(shù)對象是自動存儲。
auto 類型 變量名[=初值]
4. 寄存器變量
C++語言允許CPU的寄存器來存放局部變量,稱為寄存器變量。
register 類型 變量名[=初值]
5. 靜態(tài)局部對象
在局部對象的前面加上static存儲類別修飾用來指明對象是靜態(tài)局部對象,
static 類型 變量[=初值]
四、內(nèi)部函數(shù)與外部函數(shù)1. 內(nèi)部函數(shù)
函數(shù)本質(zhì)上是全局的,在多文件的程序中,在連接時會檢查函數(shù)在全局作用域內(nèi)是否名字唯一,如果不是則出現(xiàn)連接錯誤。
在函數(shù)定義前加static修飾,則函數(shù)稱為內(nèi)部函數(shù),定義形式為:
static 返回類型 函數(shù)名(形式參數(shù)列表)
{
? 函數(shù)體;
}
內(nèi)部函數(shù)僅在包含它的文件中有效。
該函數(shù)在邏輯上僅限定在一個文件中使用,其他文件不會用到。而且希望在連接檢查時永遠不可能出現(xiàn)該函數(shù)名不唯一的連接錯誤,這在多人編寫同一個程序的軟件開發(fā)模式中是常用的策略。
2. 外部函數(shù)
在函數(shù)定義前加上extern聲明,則函數(shù)稱為外部函數(shù),定義形式為:
extern 返回類型 函數(shù)名(形式參數(shù)列表)
{
? 函數(shù)體
}
C++中所有的函數(shù)本質(zhì)上都是外部函數(shù),extern都可以省略。
五、頭文件與工程文件六、多文件編譯編譯器:g++
過程:源文件、預(yù)處理、編譯、匯編、鏈接、可執(zhí)行文件
多文件
(1)
a.h
#ifndef A_H__
#define A_H__
double fsin(double x);
#endif
a.cpp
#include#include "main.h"
#include "a.h"
double fsin(double x)
{
return sin(x*PI/180.0);
}
(2)
b.h
#ifndef B_H__
#define B_H__
double fcos(double x);
#endif
b.cpp
#include#include "main.h"
#include "b.h"
double fcos(double x)
{
return cos(x*PI/180.0);
}
(3)
c.h
#ifndef C_H__
#define C_H__
double fsqrt(double x);
#endif
c.cpp
#include#include "c.h"
double fsqrt(double x)
{
return sqrt(x);
}
(4)
main.h
#define PI 3.1415926535
main.cpp
#includeusing namespace std;
#include "a.h"
#include "b.h"
#include "c.h"
int main()
{
char n;
double x;
cin >>n >>x;
if(n == '1')
cout<< "sin(x) = "<< fsin(x)<< endl;
else if(n == '2')
cout<< "cos(x) = "<< fcos(x)<< endl;
else if(n == '3')
cout<< "sqrt(x) = "<< fsqrt(x)<< endl;
else
cout<< "error"<< endl;
return 0;
}
(5) makefile
main:main.o a.o b.o c.o
g++ main.o a.o b.o c.o -o main
main.o:main.cpp
g++ main.cpp -c -o main.o
a.o:a.cpp
g++ a.cpp -c -o a.o
b.o:b.cpp
g++ b.cpp -c -o b.o
c.o:c.cpp
g++ c.cpp -c -o c.o
clean:
rm *.o main -rf
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧