每個(gè)人都曾試圖在平淡的學(xué)習(xí),、工作和生活中寫一篇文章,。寫作是培養(yǎng)人的觀察,、聯(lián)想、想象,、思維和記憶的重要手段,。寫范文的時(shí)候需要注意什么呢,?有哪些格式需要注意呢,?接下來小編就給大家介紹一下優(yōu)秀的范文該怎么寫,我們一起來看一看吧,。
c語言 預(yù)處理 c語言的預(yù)處理功能是指篇一
c語言實(shí)習(xí)總結(jié)
推薦度:
c語言課程設(shè)計(jì)個(gè)人總結(jié)
推薦度:
c語言程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
推薦度:
c語言程序設(shè)計(jì)課程設(shè)計(jì)總結(jié)
推薦度:
c語言程序設(shè)計(jì)心得體會(huì)
推薦度:
相關(guān)推薦
c語言的設(shè)計(jì)目標(biāo)是提供一種能以簡(jiǎn)易的方式編譯,、處理低級(jí)存儲(chǔ)器、產(chǎn)生少量的機(jī)器碼以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的編程語言,。那么c語言預(yù)處理知識(shí)都有哪些呢,?以下僅供參考!
在編譯器編譯之前,,會(huì)首先搜索預(yù)處理指令,,按照指令完成編譯,預(yù)處理又分為:文件包含,、條件編譯,、布局控制(雜注)和宏替換。
#include""和#include<>,,前者是和該c文件相同目錄下的.h,,如 #include "os_cfg.h" ,或指明路徑的.h,,如 #include "softwareucos-iisourceucos_ii.h" ,;
后者是編譯器系統(tǒng)路徑中的.h,一般c語言標(biāo)準(zhǔn)庫函數(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í)行語句(本protothread的語句,,一般是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ù),尤其是很短又沒有局部變量的一些語句,,還可以代換很多復(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ù)處理知識(shí)】相關(guān)文章:
c語言預(yù)處理的相關(guān)知識(shí)
09-28
c語言編譯預(yù)處理10-06
有趣的c語言預(yù)處理10-04
c語言的預(yù)處理代碼09-28
c語言預(yù)處理概述以及文件包含命令10-06
c語言中的三種預(yù)處理功能09-26
c語言入門必備知識(shí)09-25
c語言進(jìn)制知識(shí)總結(jié)09-24
c語言基礎(chǔ)小知識(shí)09-22
c語言的預(yù)處理09-23