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