每個(gè)人都曾試圖在平淡的學(xué)習(xí),、工作和生活中寫一篇文章。寫作是培養(yǎng)人的觀察、聯(lián)想,、想象,、思維和記憶的重要手段,。寫范文的時(shí)候需要注意什么呢,?有哪些格式需要注意呢,?接下來小編就給大家介紹一下優(yōu)秀的范文該怎么寫,,我們一起來看一看吧,。
c語(yǔ)言 預(yù)處理 c語(yǔ)言的預(yù)處理功能是指篇一
c語(yǔ)言實(shí)習(xí)總結(jié)
推薦度:
c語(yǔ)言課程設(shè)計(jì)個(gè)人總結(jié)
推薦度:
c語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
推薦度:
c語(yǔ)言程序設(shè)計(jì)課程設(shè)計(jì)總結(jié)
推薦度:
c語(yǔ)言程序設(shè)計(jì)心得體會(huì)
推薦度:
相關(guān)推薦
c語(yǔ)言的設(shè)計(jì)目標(biāo)是提供一種能以簡(jiǎn)易的方式編譯、處理低級(jí)存儲(chǔ)器,、產(chǎn)生少量的機(jī)器碼以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的編程語(yǔ)言,。那么c語(yǔ)言預(yù)處理知識(shí)都有哪些呢?以下僅供參考,!
在編譯器編譯之前,,會(huì)首先搜索預(yù)處理指令,按照指令完成編譯,,預(yù)處理又分為:文件包含,、條件編譯、布局控制(雜注)和宏替換,。
#include""和#include<>,,前者是和該c文件相同目錄下的.h,如 #include "os_cfg.h" ,,或指明路徑的.h,,如 #include "softwareucos-iisourceucos_ii.h" ;
后者是編譯器系統(tǒng)路徑中的.h,,一般c語(yǔ)言標(biāo)準(zhǔn)庫(kù)函數(shù)在編譯器里集成,,如 #include。
只要包含了.h,,而.h里有函數(shù)聲明(或變量,、結(jié)構(gòu)體實(shí)例),,那么不論這個(gè)函數(shù)(變量、結(jié)構(gòu)體實(shí)例)在那個(gè).c文件里定義的,,都可以在主c文件中使用,。
對(duì)于函數(shù),可以按功能分類成各種模塊,,集合在一起寫成一個(gè).c文件,,然后作同名的.h給出函數(shù)聲明,如果模塊太多,,也可以再用一個(gè).h來包含各模塊的.h,,ucos-ii中的includes.h就是這樣。
對(duì)于變量,,c模塊中的全局變量只對(duì)該模塊有效,,如果想要被其他c文件訪問,就得在.h里聲明,,如果主c包含了這個(gè).h,,那么此變量就成了真正全局的了。
對(duì)于結(jié)構(gòu)體實(shí)例,,其結(jié)構(gòu)的定義可以放在.h里,(如果不需要到處定義很多實(shí)例放在c里也可以),,實(shí)例定義在c里,而聲明放在.h里,,這樣就到處可用此實(shí)例了,。
#include 的對(duì)象直接插入到了該位置,所以可能出現(xiàn)#include重復(fù)甚至嵌套,,用#ifndef...#define...代碼...#endif的方法可以保證重復(fù)包含的.h那個(gè)只在第一次出現(xiàn)時(shí)編譯.
上面的#ifndef就是條件編譯的一種,。條件編譯主要用于跳過某些代碼不編譯,這樣可以用來寫一個(gè)c文件,,但是適應(yīng)不同硬件版本,,或者可采用不同算法。我就經(jīng)常用多種算法寫同一個(gè)功能,,#define method 1,#if methof==1...#endif, #if method ==2...#endif
protothread的神奇功能就是用宏和條件編譯來實(shí)現(xiàn)的,。舉個(gè)例子:
#define lc_init(s) s = 0;
#define lc_resume(s) switch(s) { case 0:
#define lc_set(s) s = __line__; case __line__:
#define lc_end(s) }
#define pt_begin(pt) { char pt_yield_flag = 1; lc_resume((pt)->lc)
每個(gè)線程執(zhí)行一次 pt_begin(pt),這樣就創(chuàng)建了一個(gè)switch,,一開始 pt->lc=0, pt_begin(pt)之后繼續(xù)執(zhí)行語(yǔ)句(本protothread的語(yǔ)句,,一般是while(1)),執(zhí)行到pt_wait_until(pt, condition)之類會(huì)調(diào)用lc_set((pt)->lc);然后return,,于是pt->lc記錄了行號(hào),,創(chuàng)建了case:,下次進(jìn)到線程之直接走 lc_resume(s)里的switch到上次的位置
主要是#pragma,從實(shí)用的.角度講,就是編譯器為了簡(jiǎn)化用戶操作,,給用戶提供了一些命令,,不同編譯器是不一樣的,比如,,iar ew430就可以直接定義中斷函數(shù)而不用管中斷向量表在哪兒,。(比如arm7就要編譯前手動(dòng)改程序段的中斷向量表,dspf2812就要用程序指令改數(shù)據(jù)段的中斷向量表,,而51則由keil自動(dòng)放置中斷跳轉(zhuǎn)指令,。)
#pragma vector=port1_vector
__interrupt void port_1(void)
{
//code
}
編譯器會(huì)自動(dòng)給中斷函數(shù)指定中斷向量。
宏函數(shù)其實(shí)可以巧妙的代替函數(shù),,尤其是很短又沒有局部變量的一些語(yǔ)句,,還可以代換很多復(fù)雜的格式,如
#define f "%6.2f"
#define f3 f " " f " " f" "
用函數(shù)printf(f3,a,b,c),可以同時(shí)指定a,b,c 的格式
為了處理一些有用的信息,,預(yù)處理定義了一些預(yù)處理標(biāo)識(shí)符,,雖然各種編譯器的預(yù)處理標(biāo)識(shí)符不盡相同,但是他們都會(huì)處理下面的4種:
__file__ 正在編譯的文件的名字
__line__ 正在編譯的文件的行號(hào)
__date__ 編譯時(shí)刻的日期字符串,,例如: "25 dec 2000"
__time__ 編譯時(shí)刻的時(shí)間字符串,,例如: "12:30:55"
s("content_relate");【c語(yǔ)言預(yù)處理知識(shí)】相關(guān)文章:
c語(yǔ)言預(yù)處理的相關(guān)知識(shí)
09-28
c語(yǔ)言編譯預(yù)處理10-06
有趣的c語(yǔ)言預(yù)處理10-04
c語(yǔ)言的預(yù)處理代碼09-28
c語(yǔ)言預(yù)處理概述以及文件包含命令10-06
c語(yǔ)言中的三種預(yù)處理功能09-26
c語(yǔ)言入門必備知識(shí)09-25
c語(yǔ)言進(jìn)制知識(shí)總結(jié)09-24
c語(yǔ)言基礎(chǔ)小知識(shí)09-22
c語(yǔ)言的預(yù)處理09-23