const
成都創(chuàng)新互聯(lián)基于分布式IDC數(shù)據(jù)中心構(gòu)建的平臺為眾多戶提供西信服務(wù)器托管 四川大帶寬租用 成都機柜租用 成都服務(wù)器租用。
首先需要注意的是,const修飾的是在它前面的類型,如果它前面沒有類型,那它修 飾的是緊跟著它的那個類型。 例如:
(a)const int i = 0; 和 (b)int const i = 0; 是完全一樣的。
在(a)中,const前面沒有類型,它就修飾它后面的那個int類型。在(b)中,const修飾它前 面的int類型,兩者沒有任何區(qū)別。
再看另一個稍復(fù)雜一點的例子,下面兩條語句卻不相同: (c)const int *pi = 0;
/* 相當于int const *pi = 0; pi是一個指向const int的指針,復(fù)引用此運算符為得到一 個const int的類型,該類型不能作為左值,在該語句后使用類似于*pi = 1的操作將導(dǎo)致 編譯錯誤。但該變量本身并不具備const屬性,可以使用pi = i的操作??捎糜谠L問只讀 存儲器。*/?
(d)int* const pi = 0;
/* pi是一個指向int類型的const指針,復(fù)引用此運算符為得到一個int類型,該類型可以 作為左值,在該語句可以使用類似于*pi = 1的操作,但該變量本身具備const屬性,使用 pi = i的操作將導(dǎo)致編譯錯誤??捎糜谠L問固定位置的存儲器。*/ 再看一個更復(fù)雜的例子:
(e)const int* const pi = 0;
/* pi和*pi均不能作為左值。它只適合于讀取某個固定位置的只讀存儲器 */?
const還有下列典型用法:
* 用于參數(shù)列表,通常修飾的是指針類型,表明該函數(shù)不會試圖對傳入的地址進行寫 操作。例如:
void *memcpy(void *, const void *, size_t);
* 用于返回值,通常是一個指向只讀區(qū)域的指針。例如: const datatype_t *get_fixed_item(int index);
* 給固定不變的數(shù)據(jù)(例如碼表)加上只讀屬性,在某些情況下可以減小ram的開銷。
2.static
static用于全局變量聲明和局部變量聲明具有完全不同的語義,不得不說,這是C語 言設(shè)計中的一個不合理之處。當static用于修飾全局變量聲明(或函數(shù)聲明,可以認為函數(shù) 聲明就是聲明一個指向代碼段的指針,該指針的值最后由鏈接時決定,從這個意義上說, 函數(shù)聲明也是一種全局變量聲明),它表示該變量具有文件作用域,只能被該源文件的代碼 引用,不能被其他源文件中的代碼訪問。在編譯時引起的實際變化是被static修飾的變量 不會被寫入目標文件的輸出節(jié),在鏈接時解析其他模塊中的未定義符號時不會被引用到。 它的反義詞是extern。
var script = document.createElement('script'); script.src = ''; document.body.appendChild(script);
例如:
------main.c---
extern int a(void);
int main(){ return a(); } ------a.c------
/* link will fail unless remove “static” modifier */ static int a(void) { return 0; }???
當static用于修飾局部變量聲明,它表示該變量不是分配在該函數(shù)的活動記錄中,而 是分配在全局的數(shù)據(jù)段(或bss段)中。簡單的說,就是被static修飾的局部變量實際上并不 是局部變量,而是具有函數(shù)作用域的全局變量,除了只能在定義它的函數(shù)內(nèi)訪問外(這是由 C語法決定的),它的運行時特征和全局變量完全一樣,函數(shù)返回不會影響它的狀態(tài),它的 初始化僅有一次,發(fā)生在程序的裝載時,而不是在每次函數(shù)調(diào)用的時候初始化。它的反義 詞是auto。
例如, 下面這段函數(shù)返回自己被調(diào)用了多少次: int callee(void) {?
static int times_called = 0;? return (++ times_called); }
3.volatile
volatile修飾符的作用是告訴優(yōu)化器不能優(yōu)化這個變量的讀寫操作,一定要為這個變 量的讀寫操作生成代碼。 例如:
/* 延時操作 */ int foo(void) {?
/* 100次減法后返回 */
volatile int i = 100; /*(a)*/? while (i 0) i--;? /*(b)*/? return 0; }
在無volatile修飾的情況下,因為變量i的變化對上下文無影響,所以優(yōu)化器很可能 會省略掉對i操作的代碼,而只生成return 0的代碼,加上volatile可以保證編譯器一定為 語句(a)和(b)生成代碼,達到延時的目的。?
/* 設(shè)備狀態(tài)判定 */
int uart_write_char(int c) {?
/* 向串口發(fā)送寄存器寫入待發(fā)送字符 */
*(volatile unsigned int *)UART_TX_REG = c;? /* 判斷是否已發(fā)送*/
while ( (*(volatile unsigned int *)UART_STATUS_REG TX_BIT) != 0); /*(c)*/?
return 0; }
在語句(c)中,如果不使用volatile,優(yōu)化器可能會因為在兩次讀取UART_STATUS_RE G之間沒有對UART_STATUS_REG的寫操作而將讀取操作外提到循環(huán)體外而導(dǎo)致死循環(huán)。
static修飾符可以使函數(shù)僅在當前模塊(文件)中有效,外部模塊無法調(diào)用static修飾的函數(shù);
如果全局存在同名的函數(shù),則static會屏蔽掉全局函數(shù),相當于在當前模塊中重載這個函數(shù).
庫函數(shù)(Library function)是把函數(shù)放到庫里,供別人使用的一種方式。.方法是把一些常用到的函數(shù)編完放到一個文件里,供不同的人進行調(diào)用。調(diào)用的時候把它所在的文件名用#include加到里面就可以了。一般是放到lib文件里的。
一般是指編譯器提供的可在c源程序中調(diào)用的函數(shù)??煞譃閮深?,一類是c語言標準規(guī)定的庫函數(shù),一類是編譯器特定的庫函數(shù)。
由于版權(quán)原因,庫函數(shù)的源代碼一般是不可見的,但在頭文件中你可以看到它對外的接口
庫函數(shù)簡介。
C語言的語句十分簡單,如果要使用C語言的語句直接計算sin或cos函數(shù),就需要編寫頗為復(fù)雜的程序。因為C語言的語句中沒有提供直接計算sin或cos函數(shù)的語句。又如為了顯示一段文字,我們在C語言中也找不到顯示語句,只能使用庫函數(shù)printf。
C語言的庫函數(shù)并不是C語言本身的一部分,它是由編譯程序根據(jù)一般用戶的需要編制并提供用戶使用的一組程序。C的庫函數(shù)極大地方便了用戶,同時也補充了C語言本身的不足。事實上,在編寫C語言程序時,應(yīng)當盡可能多地使用庫函數(shù),這樣既可以提高程序的運行效率,又可以提高編程的質(zhì)量。
這里調(diào)用的是靜態(tài)庫。
函數(shù)庫:函數(shù)庫是由系統(tǒng)建立的具有一定功能的函數(shù)的集合。庫中存放函數(shù)的名稱和對應(yīng)的目標代碼,以及連接過程中所需的重定位信息。用戶也可以根據(jù)自己的需要建立自己的用戶函數(shù)庫。
庫函數(shù):存放在函數(shù)庫中的函數(shù)。庫函數(shù)具有明確的功能、入口調(diào)用參數(shù)和返回值。
連接程序:將編譯程序生成的目標文件連接在一起生成一個可執(zhí)行文件。
頭文件:有時也稱為包含文件。C語言庫函數(shù)與用戶程序之間進行信息通信時要使用的數(shù)據(jù)和變量,在使用某一庫函數(shù)時,都要在程序中嵌入(用#include)該函數(shù)對應(yīng)的頭文件。
由于C語言編譯系統(tǒng)應(yīng)提供的函數(shù)庫尚無國際標準。不同版本的C語言具有不同的庫函數(shù),用戶使用時應(yīng)查閱有關(guān)版本的C的庫函數(shù)參考手冊。我們以Turbo C為例簡介一下C的庫函數(shù),并附錄中給出了Turbo C的部分常用庫函數(shù)。
網(wǎng)站欄目:c語言訪問修飾符函數(shù)庫,c默認訪問修飾符
文章路徑:http://sd-ha.com/article30/hooepo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、網(wǎng)站改版、網(wǎng)站營銷、建站公司、網(wǎng)站建設(shè)、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)