精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C語言關(guān)鍵字應(yīng)用技巧

開發(fā) 后端
volatile修飾表示變量是易變的,編譯器中的優(yōu)化器在用到這個變量時必須每次都小心地從內(nèi)存中重新讀取這個變量的值,而不是使用保存在寄存器里的備份,有效的防止編譯器自動優(yōu)化,從而與軟件設(shè)計相符合。

 

1、volatile

volatile修飾表示變量是易變的,編譯器中的優(yōu)化器在用到這個變量時必須每次都小心地從內(nèi)存中重新讀取這個變量的值,而不是使用保存在寄存器里的備份,有效的防止編譯器自動優(yōu)化,從而與軟件設(shè)計相符合。

中斷服務(wù)與主程序共享變量:

  1. //volatile uint8_t flag=1; 
  2. uint8_t flag=1; 
  3.  
  4. void test(void) 
  5.     while(flag) 
  6.     { 
  7.         //do something 
  8.     } 
  9.  
  10. //interrupt service routine 
  11. void isr_test(void) 
  12.     flag=0; 

如果沒使用volatile定義flag,可能在優(yōu)化后test陷入死循環(huán),因為test里使用的flag并沒修改它,開啟優(yōu)化后,編譯器可能會固定從某個內(nèi)存取值。例如:

  1. for(int i=0; i<100000; i++); 
  2. //對比 
  3. for(volatile int i=0; i<100000; i++); 

前者可能被優(yōu)化掉,雖然編碼本意是需要執(zhí)行操作延時,但編譯器認(rèn)為代碼無意義。

總的來說,volatile是告知編譯器,不管代碼如何,必須保留,而且使用時需要重新從內(nèi)存讀取更新,不能使用先前讀取的緩存,一般在驅(qū)動代碼中使用較多。

2、const

const是恒定不變的意思,其修飾的各種數(shù)據(jù)類似只讀效果。

1)修飾變量

采用const修飾變量,即變量聲明為只讀,保護(hù)變量值以防被修改。例如

  1. const int i = 1; 

上面這個例子表明,變量i具有只讀特性,不能夠被更改;若想對i重新賦值,如i = 10;屬于錯誤操作。

特別說明,定義變量的同時進(jìn)行初始化,寫成int const i=1,是正確的。

2)修飾數(shù)組

C語言中const還可以修飾數(shù)組,舉例如下:

  1. const int array[5] = {1,2,3,4,5}; 
  2. array[0] = array[0]+1; //錯誤,array是只讀的,禁止修改 

數(shù)組元素與變量類似,具有只讀屬性,不能被更改;一旦更改,編譯時就會報錯。

使用大數(shù)組存儲固定的信息,例如查表(表驅(qū)動法的鍵值表),可以使用const節(jié)省ram。編譯器并不給普通const只讀變量分配空間,而是將它們保存到符號表中,無需讀寫內(nèi)存操作,程序執(zhí)行效率也會提高。

3)修飾指針

C語言中const修飾指針要特別注意,共有兩種形式,一種是用來限定指向空間的值不能修改;另一種是限定指針不可更改。舉例如下:

  1. int i = 1; 
  2. int j = 2; 
  3.  
  4. const int *p1 = &i; 
  5. int* const p2 = &j; 

上面定義了兩個指針p1和p2,區(qū)別是const后面是指針本身還是指向的內(nèi)容。

在定義1中const限定的是* p1,即其指向空間的值不可改變,若改變其指向空間的值如* p1=10,則程序會報錯;但p1的值是可以改變的,對p1重新賦值如p1=&k是沒有任何問題的。

在定義2中const限定的是指針p2,若改變p2的值如p2=&k,程序?qū)箦e;但* p2,即其所指向空間的值可以改變,如* p2=20是沒有問題的,程序正常執(zhí)行。

4)修飾函數(shù)參數(shù)

const關(guān)鍵字修飾函數(shù)參數(shù),對參數(shù)起限定作用,防止其在函數(shù)內(nèi)部被修改。所限定的函數(shù)參數(shù)可以是普通變量,也可以是指針變量。例如:

  1. void fun(const int i) 
  2.     …… 
  3.     i++; //對i的值進(jìn)行了修改,程序報錯 

常用的函數(shù)如strlen

  1. size_t strlen(const char *string); 

const在庫函數(shù)中使用非常普遍,是一種自我保護(hù)的安全編碼思維。

3、struct與union

對于struct 結(jié)構(gòu)體和union共聯(lián)體在嵌入式領(lǐng)域是使用得非常頻繁的,一些可編程芯片提供的寄存器庫都是采用結(jié)構(gòu)體和共聯(lián)體結(jié)合的方式來提供給軟件人員進(jìn)行開發(fā),同時在平時的編碼過程中這兩個數(shù)據(jù)類型的靈活應(yīng)用也能夠?qū)崿F(xiàn)代碼更好的封裝與簡化。

如下面的簡單示例,就可以非常靈活的訪問Val中的bit位。

  1.  typedef union 
  2.  { 
  3.      BYTE Val; 
  4.      struct __packed 
  5.      { 
  6.         BYTE b0:1; 
  7.         BYTE b1:1; 
  8.         BYTE b2:1; 
  9.         BYTE b3:1; 
  10.         BYTE b4:1; 
  11.         BYTE b5:1; 
  12.         BYTE b6:1; 
  13.         BYTE b7:1; 
  14.     } bits; 
  15. }BYTE_VAL, BYTE_BITS; 

其中:1表示按位操作。不只是位-字節(jié)可以,單字節(jié)與多字節(jié)也可以簡化拼接。

  1. #include "stdio.h" 
  2.  
  3. typedef struct 
  4.     union 
  5.     { 
  6.         struct 
  7.         { 
  8.             unsigned char low; 
  9.             unsigned char high; 
  10.         }; 
  11.         unsigned short result; 
  12.     }; 
  13. }test_t; 
  14.  
  15.  
  16. int main(int argc, char *argv[]) 
  17.     test_t hello; 
  18.  
  19.     hello.high=0x12; 
  20.     hello.low=0x34; 
  21.  
  22.     printf("result=%04X\r\n",hello.result);//輸出 result=1234  
  23.  
  24.     return 0; 

運行輸出 result=1234 (win7系統(tǒng)下QT開發(fā)環(huán)境),原本需要 (high<<8)|low 運算,可以簡化為共用體類型自動完成,但必須注意平臺的字節(jié)順序,屬于大端還是小端模式。

在應(yīng)用層面,如果明確某個數(shù)據(jù)可能存在兩種可能,而且兩種結(jié)果不會同時存在,也可以使用結(jié)構(gòu)體與共用體組合的方式,確保模塊對外接口統(tǒng)一。

例如移動通信模塊,使用數(shù)據(jù)結(jié)構(gòu)保存其基站信息,因為制式不同,模塊可能工作在2G-GSM,也可能在4G-Cat1,為保證上層讀取基站信息接口唯一,使用共用體就非常合適,否則需定義兩套接口。如果覺得文章可以,可關(guān)注微信公眾號【嵌入式系統(tǒng)】獲取更多信息。

4、預(yù)定義標(biāo)識符

一般編譯器都支持預(yù)定義標(biāo)識符,這些標(biāo)識符結(jié)合printf等打印信息幫助程序員調(diào)試程序是非常有用的,一般編譯器會自動根據(jù)用戶指定完成替換和處理。

部分標(biāo)識:

  1. __FILE__    //表示編譯的源文件名 
  2. __LINE__   //表示當(dāng)前文件的行號 
  3. __FUNCTION__  //表示函數(shù)名 
  4. __DATE__  //表示編譯日期 
  5. __TIME__   //表示編譯時間 

使用范例:

  1. printf("file:%s,line:%d,date:%s,time:%s",__FILE__,__LINE__,__DATE__,__TIME__); 

這些比較常見,主要用于日志分析、版本記錄,便于調(diào)試。

5、#與##

#:是一種運算符,用于帶參宏的文本替換,將跟在后面的參數(shù)轉(zhuǎn)成一個字符串常量。

##:是一種運算符,是將兩個運算對象連接在一起,也只能出現(xiàn)在帶參宏定義的文本替換中。

  1. #include "stdio.h" 
  2.  
  3. #define TO_STR(s) #s 
  4. #define COMB(str1,str2) str1##str2 
  5.  
  6. int main(int argc, char *argv[]) 
  7.     int UART0= 115200; 
  8.  
  9.     printf("UART0=%d\n", COMB(UART, 0));//字符串合并為變量UART0 
  10.     printf("%s\n", TO_STR(3.14));//將數(shù)字變成字符串 
  11.  
  12.     return 0; 

6、void 與 void*

void表示的是無類型,不能聲明變量或常量,但是可以把指針定義為void類型,如void* ptr。void* 指針可以指向任意類型的數(shù)據(jù),在C語言指針操作中,任意類型的數(shù)據(jù)地址都可轉(zhuǎn)為void* 指針。因為指針本質(zhì)上都是unsigned int。

常用的內(nèi)存塊操作庫函數(shù):

  1. void * memcpy( void *dest, const void *src, size_t len ); 
  2. void * memset( void *buffer, int c, size_t num); 

數(shù)據(jù)指針為void* 類型,對傳入任意類型數(shù)據(jù)的指針都可以操作。另外其中memcpy第二個參數(shù),const現(xiàn)在也如前文所述,拷貝時對傳入的原數(shù)據(jù)內(nèi)容禁止修改。

特殊說明,指針是不能使用sizeof求內(nèi)容大小的,在ARM系統(tǒng)固定為int 4字節(jié)。對于函數(shù)無輸入?yún)?shù)的,也盡量加上void,如

  1. void fun(void); 

7、weak

一般簡化定義

  1. #define _WEAK __attribute__((weak))   

函數(shù)名稱前面加上__WEAK屬性修飾符稱為“弱函數(shù)”,類似C++的虛函數(shù)。鏈接時優(yōu)先鏈接為非weak定義的函數(shù),如果找不到則再鏈接帶weak函數(shù)。

  1. _WEAK void fun(void)   
  2. {   
  3.     //do this 
  4. }   
  5.  
  6. //不在同一個.c,兩同名函數(shù)不能在同一個文件 
  7. void fun(void)   
  8. {   
  9.     //do that 
  10. }   

這種自動選擇的機制,在代碼移植和多模塊配合工作的場景下應(yīng)用較多。例如前期移植代碼,需要調(diào)用某個接口fun,但當(dāng)前該接口不存在或者未移植完整使用,可以使用weak關(guān)鍵字定義為空函數(shù)先保證編譯正常。后續(xù)移植完成實現(xiàn)了fun,即軟件中有2個fun函數(shù)沒有任何錯誤,編譯器自動會識別使用后者。當(dāng)然也粗暴的#if 0屏蔽對fun的調(diào)用,但要確保后續(xù)記得放開。

8、總結(jié)

存在即合理,C語言里面的關(guān)鍵字,每個都有其特殊的意義,只是一般使用較少,譬如作文,使用常用的漢字可以;但引經(jīng)據(jù)典,使用特殊的修飾辭藻更能顯出水平。后續(xù)對section 進(jìn)行詳細(xì)說明,它和動態(tài)加載(OTA)、接口自啟動相關(guān)。

本文轉(zhuǎn)載自微信公眾號「嵌入式系統(tǒng)」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系嵌入式系統(tǒng)公眾號。

 

責(zé)任編輯:武曉燕 來源: 嵌入式系統(tǒng)
相關(guān)推薦

2009-06-29 12:58:47

This關(guān)鍵字java

2010-02-02 14:27:54

C++ static關(guān)

2010-02-05 15:51:06

C++ explici

2009-09-02 09:24:03

C# this關(guān)鍵字

2009-08-21 14:58:56

C# this關(guān)鍵字

2011-06-24 17:39:08

長尾關(guān)鍵詞

2011-05-17 13:04:20

Cconst

2009-08-13 13:04:29

C# lock關(guān)鍵字

2009-08-21 14:47:59

C# base關(guān)鍵字

2009-08-26 15:16:29

C# lock關(guān)鍵字

2011-06-14 13:26:27

volatile

2009-08-13 17:44:34

C# using關(guān)鍵字

2009-08-06 17:52:23

C#增加that關(guān)鍵字

2010-02-01 13:19:09

C++ explici

2015-11-10 16:10:22

C語言StaticConst

2011-07-14 23:14:42

C++static

2023-11-19 22:52:42

2009-08-21 14:16:35

C# New關(guān)鍵字

2011-06-21 09:50:51

volatile

2010-01-26 14:35:11

C++關(guān)鍵字
點贊
收藏

51CTO技術(shù)棧公眾號

久久亚洲精品爱爱| 成年在线电影| 日韩图片一区| 亚洲人成人99网站| 国产美女18xxxx免费视频| 伊人影院在线视频| 91麻豆免费观看| 国产精品一区二区性色av| 黄色录像一级片| youjizzjizz亚洲| 日本高清成人免费播放| 99中文字幕在线观看| 色吊丝在线永久观看最新版本| 欧美aaaaaa午夜精品| 欧美精品久久久久a| 波多野在线播放| 亚洲一区电影| 欧美日韩一区二区三区免费看| 国产成人生活片| 日本在线视频1区| 国产精品亚洲一区二区三区在线| 欧美最猛性xxxxx(亚洲精品)| 国产三级国产精品国产国在线观看| 色愁久久久久久| 日韩三级在线免费观看| 性欧美极品xxxx欧美一区二区| 中文字幕伦理免费在线视频| 久久夜色精品国产噜噜av| 成人综合国产精品| 天天干天天插天天射| 91久久亚洲| 欧美xxxx综合视频| 国产视频精品免费| 奇米影视亚洲| 日韩国产精品一区| 日本精品一二三区| 成人影院网站ww555久久精品| 一本一道波多野结衣一区二区| 黄色一级视频播放| 77导航福利在线| 国产欧美日韩中文久久| 精品蜜桃一区二区三区| 精品久久久久中文慕人妻| 久久精品国产精品亚洲综合| 欧美一区二区影院| 懂色av.com| 午夜精品偷拍| 欧美日本黄视频| 黄色a级片在线观看| 97精品国产| 色伦专区97中文字幕| 国产黄色大片免费看| 欧美顶级毛片在线播放| 亚洲电影免费观看高清完整版在线观看| 一级黄色片国产| 福利一区三区| 日韩视频免费观看高清在线视频| 亚洲欧美天堂在线| 四虎在线精品| 7777精品伊人久久久大香线蕉的| 午夜视频在线瓜伦| 日韩精品三区| 欧美中文一区二区三区| 美女黄色片视频| 久久国内精品| 91精品国产综合久久蜜臀| 欧洲在线免费视频| 久久久久久久久成人| 日韩三级视频中文字幕| 免费人成视频在线播放| 国产精品香蕉| 亚洲欧美日本精品| 欧美色图17p| 91精品国产视频| 久久久久久久久久婷婷| 男人天堂中文字幕| 美女久久一区| 成人黄色网免费| 国产成人a人亚洲精品无码| 国产suv精品一区二区883| 国产精品久久久对白| 四虎在线观看| 国产精品视频看| xxxxxx在线观看| caoporn视频在线观看| 欧美三级免费观看| 毛片毛片毛片毛| jizz性欧美23| 一区二区三区四区视频| 精品自拍偷拍视频| 99热免费精品| 国产精品专区第二| 欧美熟女一区二区| 国产精品理伦片| 蜜臀av色欲a片无码精品一区| 在线看的毛片| 欧美日韩精品专区| 国产伦精品一区三区精东| 精品日韩欧美一区| 欧美极品少妇xxxxⅹ喷水| 中文字幕国产在线观看| 国产专区综合网| 美女主播视频一区| 成人高清免费在线| 欧美日韩中文字幕日韩欧美| 成年人网站av| 国产亚洲一区| 久久久久亚洲精品国产| 在线观看色网站| 99久久久久久99| 天天成人综合网| 成人美女视频| 精品日韩一区二区| 黄色片网站在线播放| 国产视频一区在线观看一区免费| 国产日韩在线看片| 精品影院一区| 亚洲成人中文在线| 999久久久精品视频| 免费视频一区三区| 久久久噜噜噜久久久| 国产永久免费视频| 国产色产综合色产在线视频| 免费一级特黄毛片| 亚洲一级大片| 免费91麻豆精品国产自产在线观看| 黄色一级视频免费看| 成年人国产精品| 嫩草影院中文字幕| 91视频亚洲| 中文字幕在线观看亚洲| 黄色在线免费观看| av在线免费不卡| 97超碰国产精品| 久久一级大片| 粗暴蹂躏中文一区二区三区| 在线免费看毛片| 中文字幕第一区二区| 熟妇人妻va精品中文字幕| 国产精品115| 欧美激情视频一区| 亚洲精品字幕在线观看| 亚洲人123区| 三级黄色片免费观看| 水蜜桃精品av一区二区| 国产精品视频不卡| 午夜视频在线观看网站| 欧美中文字幕亚洲一区二区va在线| 欧美图片一区二区| 三级欧美在线一区| 欧美日韩喷水| 亚洲成av在线| 最近2019中文字幕在线高清 | 日韩欧美大片| 国产精品欧美日韩一区二区| 成年人免费在线视频| 在线观看日韩电影| 国产美女永久免费无遮挡| 日韩电影一二三区| 亚洲一区美女| 国产精品高清一区二区| 欧美成人一二三| 欧美一区二区三区成人片在线| 亚洲制服丝袜在线| 少妇一级淫片免费放播放| 亚洲影视在线| 日韩国产欧美一区| 日本久久久久| 欧美国产日韩在线| 欧美777四色影视在线| 91国产免费观看| 国产jizz18女人高潮| 狠狠色丁香久久婷婷综合_中 | 欧美18—19性高清hd4k| 免费观看一级特黄欧美大片| 视频一区二区视频| 国内精品偷拍| 国产精品9999| 成人短视频在线| 亚洲黄色av女优在线观看 | 欧美美乳视频网站在线观看| 日韩一区二区三区在线免费观看| 少妇高潮久久久久久潘金莲| 国产黄色片网站| 色综合av在线| 亚洲综合网在线| 91视频国产资源| 国产探花在线看| 亚洲精品韩国| 亚洲区一区二区三区| 在线精品自拍| 国产精品h在线观看| av网站大全在线| 亚洲美女激情视频| 99热精品在线播放| 色综合久久中文综合久久97| 视频国产一区二区| 久久综合九色综合97婷婷女人| 五月天av在线播放| 在线亚洲成人| 伊人网在线免费| 欧美日韩色图| 精品久久久久久中文字幕动漫 | 超碰在线无需免费| 亚洲伦理中文字幕| 精品久久久中文字幕人妻| 欧美在线999| 国产精品7777777| 亚洲欧美视频一区| 国产美女永久免费无遮挡| 粉嫩在线一区二区三区视频| 蜜臀久久99精品久久久酒店新书 | 精品黑人一区二区三区国语馆| 色八戒一区二区三区| 久久综合加勒比| 中文字幕一区二| 国产精品久久久久无码av色戒| 国产精品456露脸| 亚洲一区日韩精品| 视频一区在线视频| av免费观看网| 尤物网精品视频| 欧美一级中文字幕| 欧美r级电影| 日韩欧美精品一区二区| 欧美高清视频看片在线观看| 亚洲最大成人在线| 亚洲欧美在线人成swag| 国产aⅴ夜夜欢一区二区三区 | 国产日韩专区在线| 第84页国产精品| 97视频在线观看网址| 女囚岛在线观看| 欧美xxxx18国产| yellow91字幕网在线| 在线性视频日韩欧美| 蜜桃视频在线观看视频| 日韩经典一区二区三区| 天天干天天爽天天操| 欧美sm美女调教| 黄频网站在线观看| 精品国产乱码久久久久久影片| 国产xxxx孕妇| 欧美tickling挠脚心丨vk| 午夜精品久久久久久久91蜜桃| 欧美一级免费观看| aaa国产视频| 欧美不卡一二三| 亚洲精品一级片| 亚洲国产中文字幕在线观看| 天天操天天操天天| 精品一区二区三区电影| 欧美3p视频在线观看| 亚洲人永久免费| 97超碰人人在线| 久久久国产精品亚洲一区| 国产在线二区| 欧美国产乱视频| 天堂电影一区| 国产精品欧美一区二区三区奶水 | 国产精品日韩久久久| 中文字幕无码精品亚洲35| 中文日韩在线| 777米奇影视第四色| 玖玖在线精品| 色天使在线观看| 国产成人一区在线| 国产成人无码一区二区在线观看| wwwwww.欧美系列| 欧美激情久久久久久久| 亚洲欧洲性图库| 国产大片中文字幕| 欧美性少妇18aaaa视频| 这里只有精品6| 精品成人一区二区三区| 久久久久久久影视| www.亚洲天堂| ririsao久久精品一区| 日韩av电影院| 成人精品视频在线观看| 精品91免费| 精品视频免费| 精品人妻人人做人人爽| 久久精品女人| 亚洲天堂av一区二区三区| 91香蕉视频黄| 国产日产精品一区二区三区的介绍| 亚洲精品亚洲人成人网在线播放| 日本一级淫片色费放| 欧美性videosxxxxx| 亚洲精品无amm毛片| 一本色道久久综合狠狠躁篇怎么玩| 91精品久久久| 国产精品91视频| 国产成人夜色高潮福利影视| 品久久久久久久久久96高清| 欧美大片专区| 亚洲一区二区三区四区五区xx| 国产91丝袜在线18| 国产性猛交xx乱| 午夜激情久久久| 国产情侣av在线| 亚洲视频999| mm视频在线视频| 91亚洲精品一区| 欧美色网址大全| 欧美亚洲日本一区二区三区 | 91久久奴性调教| www.亚洲欧美| 色妞久久福利网| 免费日韩电影| 国产一区二区久久久| 国产精品精品国产一区二区| 免费在线观看的av网站| 粉嫩绯色av一区二区在线观看| 国产又粗又硬视频| 欧美性猛交xxxx免费看久久久| 超碰在线人人干| 久久久成人精品| 国产欧美自拍| 色噜噜狠狠一区二区三区| 亚洲精品婷婷| 蜜臀aⅴ国产精品久久久国产老师| 国产精品久久三| 国产成人精品亚洲| 亚洲欧美三级在线| 少妇视频一区| 狠狠色综合欧美激情| 欧美日韩p片| 毛片毛片毛片毛片毛| 最新日韩在线视频| 国产精品久久久午夜夜伦鲁鲁| 亚洲性生活视频| 久久xxx视频| 天堂√在线观看一区二区| 视频在线观看国产精品| 在线国产视频一区| 色综合色综合色综合色综合色综合 | 天堂在线中文视频| 色婷婷综合久久久中文一区二区 | 黄色污污视频软件| 亚洲欧美色婷婷| 高清不卡av| 欧美综合激情| 日韩福利视频网| 久久久久久国产免费a片| 91福利视频久久久久| 国产一二三区在线| 国产精品久久久久久久久免费看 | 欧美尿孔扩张虐视频| 亚洲人成无码网站久久99热国产| 粉嫩在线一区二区三区视频| 久久午夜无码鲁丝片午夜精品| 精品盗摄一区二区三区| 第一福利在线视频| 免费影院在线观看一区| 日本在线不卡视频| 91大神福利视频| 欧美一二三在线| 91超碰在线免费| 久久久久久九九九九| 久久久久一区| av片在线免费看| 欧美成人伊人久久综合网| 成年人黄色大片在线| 六月婷婷久久| 麻豆91精品视频| 久久久久久久福利| 日韩电影免费在线观看中文字幕| 在线看片福利| 亚洲欧美日韩不卡| 粉嫩在线一区二区三区视频| 波多野结衣国产| 视频在线观看99| 超碰成人福利| 男女啪啪网站视频| 一区二区三区在线视频免费 | 欧美国产日产图区| 国产视频在线免费观看| 国模私拍一区二区三区| 精品大片一区二区| 992kp免费看片| 欧美日韩亚洲精品内裤| eeuss影院www在线播放| 97免费资源站| 天堂av在线一区| 欧美成人片在线观看| 亚洲欧洲在线免费| 1204国产成人精品视频| 成人黄色一区二区| 一区二区在线观看免费视频播放| 日韩福利一区二区| 91欧美激情另类亚洲| 国产麻豆综合| 精品国产乱码久久久久久鸭王1| 亚洲男人天堂2019| 香港久久久电影| 亚洲一区二区蜜桃| 亚洲成人av免费| 免费在线观看黄色|