㈠ 在c語言中,什麼是預處理部分,預處理部分是不是也是頭文件,即是不是包含文件預處理部分的作用是什麼
預處理部分 是由編譯器完成的,為編譯代碼提供方便。
㈡ C語言中 「編譯時處理」 與 「預處理」 兩個概念的區別
浩強哥的教材中說的很清楚,可以參考。簡單來說,C語言程序在編譯前,其實是有一個預備工作的,這個就是「預處理」,可以理解為:人類所編寫的程序,需要轉化為機器能夠編譯的合理輸入文件。機器編譯,就是按照語法來處理語句,一些語句或者邏輯是在編譯時才有意義,才進行分析,這就是「編譯時處理」。
㈢ c語言編譯器哪個好
1.
GCC
大名鼎鼎的GNU的C/C++/Obj-C編譯器,
當前版本是2.8.1,
但據說與2.7.*有兼容性
問題.
而使用較廣的是gcc
2.7.2系列,
如RedHat5中帶的就是gcc
2.7.2.3
有時候在Cyrix上用gcc會有些問題,
因此有一套針對Cyrix特點的gcc
2.7.2.3
我這里有RedHat5的rpms
ftp://166.111.68.98/pub/Warez-CD/Huricane-contrib
(Cyrix
2.7.2.3
&
2.8.1)
其基本結構就是一個front
end和back
end,
/usr/bin/gcc
就是個front
end,
其kernel東西都放在
/usr/lib/gcc-lib下面,
cpp是C預處理器,
cc1*的1M多的就是編譯器的核心模塊了
cc1
C
compiler
cc1plus
C++
compiler
cc1obj
Object-C
compiler
但gcc並沒有集成Fortran的compiler,
一般要用f2c轉成C後才用gcc編譯
好象也還有個g77
Fortran
compiler吧?
gcc的不斷發展完善使許多commercial
compiler都相形見絀,
那當然,
gcc/emacs
都由GNU創始人Richard
Stallman手創,
是GNU的旗艦產品,
質量當然沒得說了:-)
由於
Unix平台的高度可移植性,
gcc幾乎在各種常見的Unix平台上都有,
即使是
Win32/DOS也有gcc的port.
比如說該死的Solaris普通版本連compiler都沒有,
也
就只好用gcc了...
2.
EGCS(Experimental/Enhanced
GNU
Compiler
System)
這是gcc的發展方向,
把fortran等編譯器集成進來,
也許還會有Pascal?
它的構造很清晰,
把對gcc的各種改進/port都集成回去.
如gcc
2.7系列據說是
沒有對Pentium進行優化的,
而egcs則把pgcc對Pentium的一些優化集成進去了
現在gcc的開發工作主要就是egcs,
由Cygnus公司領導(?),
這Cygnus公司還是很
不錯的,
還出了GNU-Win32,
SourceNavigator等,
是GNU的堅實擁護者:-))
http://egcs.cygnus.com
包括了C/C++/Obj-C/Fortran
編譯器,
當前最新版本1.0.2,
還在不斷開發中
昨天download發現KDE
Beta4都用egcs編譯了
:-)
Fortran集成進來後在/usr/lib/gcc-lib下又多了個f771的back
end,
當然
還是g77/f77
編譯
我這里有egcs
1.0.2
的rpm
在RH5-CD/collect下面
3.
PGCC(Pentium
GCC)
http://www.gcc.ml.org
針對Pentium
CPU進行了編譯器優化的compiler
pgcc據說用JPEG壓縮解壓縮測試最快可比gcc快
30%!
新版的pgcc都是基於egcs的,
以一個patch的形式release
㈣ 都有哪些好的c語言編譯器阿
1. GCC
大名鼎鼎的GNU的C/C++/Obj-C編譯器, 當前版本是2.8.1, 但據說與2.7.*有兼容性
問題. 而使用較廣的是gcc 2.7.2系列, 如RedHat5中帶的就是gcc 2.7.2.3
有時候在Cyrix上用gcc會有些問題, 因此有一套針對Cyrix特點的gcc 2.7.2.3
我這里有RedHat5的rpms ftp://166.111.68.98/pub/Warez-CD/Huricane-contrib
(Cyrix 2.7.2.3 & 2.8.1)
其基本結構就是一個front end和back end,
/usr/bin/gcc 就是個front end, 其kernel東西都放在 /usr/lib/gcc-lib下面,
cpp是C預處理器, cc1*的1M多的就是編譯器的核心模塊了
cc1 C compiler
cc1plus C++ compiler
cc1obj Object-C compiler
但gcc並沒有集成Fortran的compiler, 一般要用f2c轉成C後才用gcc編譯
好象也還有個g77 Fortran compiler吧?
gcc的不斷發展完善使許多commercial compiler都相形見絀, 那當然, gcc/emacs
都由GNU創始人Richard Stallman手創, 是GNU的旗艦產品, 質量當然沒得說了:-)
由於 Unix平台的高度可移植性, gcc幾乎在各種常見的Unix平台上都有, 即使是
Win32/DOS也有gcc的port. 比如說該死的Solaris普通版本連compiler都沒有, 也
就只好用gcc了...
2. EGCS(Experimental/Enhanced GNU Compiler System)
這是gcc的發展方向, 把fortran等編譯器集成進來, 也許還會有Pascal?
它的構造很清晰, 把對gcc的各種改進/port都集成回去. 如gcc 2.7系列據說是
沒有對Pentium進行優化的, 而egcs則把pgcc對Pentium的一些優化集成進去了
現在gcc的開發工作主要就是egcs, 由Cygnus公司領導(?), 這Cygnus公司還是很
不錯的, 還出了GNU-Win32, SourceNavigator等, 是GNU的堅實擁護者:-))
http://egcs.cygnus.com
包括了C/C++/Obj-C/Fortran 編譯器, 當前最新版本1.0.2, 還在不斷開發中
昨天download發現KDE Beta4都用egcs編譯了 :-)
Fortran集成進來後在/usr/lib/gcc-lib下又多了個f771的back end, 當然
還是g77/f77 編譯
我這里有egcs 1.0.2 的rpm 在RH5-CD/collect下面
3. PGCC(Pentium GCC)
http://www.gcc.ml.org
針對Pentium CPU進行了編譯器優化的compiler
pgcc據說用JPEG壓縮解壓縮測試最快可比gcc快 30%!
新版的pgcc都是基於egcs的, 以一個patch的形式release
㈤ c++中的編譯器和預處理器有何不同
元代碼中,包含了兩個部分的內容,
一個是對機器有用的東西,
一個是對人有用的東西,比如 注釋。
預處理器就是 在編譯之前,把代碼整理一下,把一些沒用的東西,給處理掉。做好准備工作後,然後再編譯。
㈥ vc++中的預處理器定義是干什麼用的
預處理(pre-treatment),是指在進行最後加工完善以前進行的准備過程,具體應用在不同的行業或領域,會有不同的解釋。
在一些程序設計語言中,預處理是preprocessing的翻譯。
含義
程序設計領域中,預處理一般是指在程序源代碼被翻譯為目標代碼的過程中,生成二進制代碼之前的過程。典型地,由預處理器(preprocessor) 對程序源代碼文本進行處理,得到的結果再由編譯器核心進一步編譯。這個過程並不對程序的源代碼進行解析,但它把源代碼分割或處理成為特定的單位——(用C/C++的術語來說是)預處理記號(preprocessing token)用來支持語言特性(如C/C++的宏調用)。
C/C++預處理
最常見的預處理是C語言和C++語言。ISO C和ISO C++都規定程序由源代碼被翻譯分為若干有序的階段(phase) [1] [2] ,通常前幾個階段由預處理器實現。預處理中會展開以#起始的行,試圖解釋為預處理指令(preprocessing directive) ,其中ISO C/C++要求支持的包括#if/#ifdef/#ifndef/#else/#elif/#endif(條件編譯)、#define(宏定義)、#include(源文件包含)、#line(行控制)、#error(錯誤指令)、#pragma(和實現相關的雜注)以及單獨的#(空指令)[1] [2] 。預處理指令一般被用來使源代碼在不同的執行環境中被方便的修改或者編譯。[3]
預處理器在UNIX傳統中通常縮寫為PP,在自動構建腳本中C預處理器被縮寫為CPP的宏指代。為了不造成歧義,C++(cee-plus-plus) 經常並不是縮寫為CPP,而改成CXX。
注意預處理常被錯誤地當作預編譯(precompiling) ,事實上這是兩個不同的概念。預處理盡管並不是ISO C/C++要求的單獨階段,但「預處理」這個術語正式地出現並參與構成其它術語,如C的預處理翻譯單元(preprocessing translation unit)[1] 以及C/C++詞法規則中預處理記號(prerprocessing-token) 這個語法分類[1] [2] 。預編譯是一些編譯器支持的特性,不是C/C++語言的特性或實現必須要求遵循的規則涉及到的內容,沒有在ISO C/C++全文中出現[1] [2] 。
紡織物的預處理編輯
含義或目的
紡織物的預處理,是紡織物燒毛、退漿、精練、漂白、絲光和熱定形等工藝過程的總稱。預處理的目的是去除紗線或織物上的天然雜質,以及紡織過程中所附加的漿料、助劑和沾污物。經過預處理的紡織品具有較好的潤濕性、白度、光澤和尺寸穩定性。天然纖維含雜較多,其紡織物的預處理要求也較高,天然纖維與化學纖維混紡織物的預處理工藝,應以適合天然纖維為主,同時照顧化學纖維的要求。
預處理過程
燒毛是燒去紗線或織物表面的茸毛,使織物表面光潔,增進染色或印花後的色澤鮮艷度,在服用過程中不易沾塵。化學纖維織物燒毛後,還可減輕因茸毛摩擦而引起的起球現象。
退漿、精練、漂白過程都是去除織物上的各種雜質,三者相輔相成,各有側重。退漿以去除漿料為主,同時也可洗除部分水溶性天然雜質;精練是以去除纖維伴生的天然雜質為主,並可去除織物上殘留的漿料等物質;漂白是以去除色素為主,並進一步去除精練後的殘留雜質。棉、麻纖維織物大多要經過退漿,常用的有熱水、鹼液、澱粉酶、氧化劑等退漿法。精練對於棉紡織物非常重要,主要是通過燒鹼液的作用去除果膠質、棉脂、棉蠟等天然雜質,並使棉籽殼殘屑體解。棉纖維的漂白常用次氯酸鈉或過氧化氫。薴麻紡織物的精練、漂白工藝和棉相似。亞麻纖維的吸水性較好,精練要求較棉為低,可用純鹼處理。亞麻紡織物的漂白常用較廉價的次氯酸鈉酸性溶液處理,再用鹼液洗除反應產物。漂白和鹼處理可交替重復進行。羊毛精練通常是在原毛狀態進行的,又稱洗毛,主要是去除羊汗和羊脂。可用含碳酸鈉和肥皂或洗滌劑的練液在50℃左右使羊脂乳化而洗除。羊毛纖維一般不經漂白過程,需要時用還原劑如二氧化硫、亞硫酸氫鈉或連二亞硫酸鈉進行漂白,但漂白效果不持久,在空氣中會逐漸氧化而泛黃;用過氧化氫漂白劑效果較好。蠶絲織物的預處理主要是精練,目的是去除絲膠。脫膠用劑主要是肥皂液,可酌加碳酸鈉。也可先用蛋白酶處理,再經肥皂液洗滌。絲纖維的色素等雜質主要集中在絲膠中,脫膠後一般不再漂白。需要漂白時通常採用過氧化氫為漂白劑。合成纖維含雜極少,織造時大多選用水溶性漿料,且用量較少,退漿常結合精練進行,處理的條件可較溫和。錦綸織物用非離子型洗滌劑處理;漂白用劑以亞氯酸鈉最宜,過氧化氫或次氯酸鈉均易使纖維受損。滌綸雖然遇鹼會水解,仍可用淡鹼液作精練處理,但應嚴格控制溫度和時間,漂白用劑以亞氯酸鈉為最好,有時退漿、精練、漂白可同時完成。
絲光主要用於加工棉、麻紡織物。絲光過程的特點是紗線或織物浸漬濃燒鹼液,使纖維發生溶脹,再在張力狀態下洗去鹼液,從而獲得耐久性的光澤,有效地提高染料的上染率並有定形作用。
熱定形主要用於受熱後易收縮變形的錦綸或滌綸等合成纖維及其混紡物的加工。這些紡織物在染色或印花之前,一般都先在有張力的狀態下用比後續工序為高的溫度進行處理,以防止織物收縮變形。
工業水處理中預處理編輯
定義和組成
沼氣在沼氣池中發酵產生後
氣體預處理
氣體預處理
,裡面會有大量的腐蝕性氣體和對環境造成嚴重污染的氣體(烷類氣體、一氧化碳、二氧化碳、硫化氣體等),對於發電機組和環境都是不能接受的,賓士預處理系統主要是為了保證燃氣發電機組能夠正常穩定的運行而設計生產的,沼氣經過預處理系統後可以大大降低硫化物、水分及顆粒度。
在工業用水處理中,預處理工序的任務是將工業用水的水源——地表水、地下水或城市自來水處理到符合後續水處理裝置所允許的進水水質指標,從而保證水處理系統長期安全、穩定地運行,為工業生產提供優質用水。
預處理的對象主要是水中的懸浮物、膠體、微生物、有機物、游離性余氯和重金屬等。這些雜質對於電滲析、離子交換、反滲透、鈉濾等水處理裝置會產生不利的影響。 [4]
(一)懸浮物
在離子交換水處理中,進水的懸浮物會附著於交換劑顆粒表面,降低交換容量。
在電滲析水處理中,進水的懸浮物會黏附在膜表面上,成為離子遷移的障礙,增加膜電阻。
在鈉濾、反滲透中,進水的懸浮物會堵塞膜的微孔,使透水率下降。
(二)有機物
在離子交換水處理中,有機物會污染陰離子交換樹脂,使其交換容量下降,再生劑耗量增大,樹脂使用壽命縮短。
在電滲析水處理中,水中帶極性有機物被膜吸附後,會改變膜的極性,並使膜的選擇透過性降低,膜電阻增加。
在反滲透、鈉濾水處理中,有機物、膠體、懸浮物容易堵塞反滲透、鈉濾膜的微孔,使透水率很快下降。
(三)微生物
水中的細菌轉移到電滲析膜,在膜面上繁殖,會使膜電阻增加。
細菌、微生物對醋酸纖維素反滲透、納濾膜有侵蝕作用。細菌繁殖會污染膜。
(四)游離性余氯
游離性余氯會使陽離子交換樹脂或離子交換膜活性基團氧化分解,引起樹脂或膜結構破壞。還會使反滲透聚醯胺膜性能惡化。
(五)鐵、錳離子
鐵、錳離子易被離子交換樹脂吸附,且不易被再生劑取代,降低交換容量。也會使電滲析膜污染、中毒。鐵、錳金屬氧化物,其含量高時,在反滲透、納濾膜表面易形成氫氧化物膠體,產生沉澱作用。
由於上述種種不利的影響,導致工業用水處理系統產水量減少,出水的水質下降,工作周期縮短,消耗指標上升,制水成本提高,樹脂和膜的使用壽命縮短,並在操作管理上增加麻煩。
隨著工農業的不斷發展,城市人口的日益密集,有些污水未經處理排入江河,使水中有害物質日益增多。這就對工業用水的預處理提出了更高的要求。
㈦ C語言裡面的預處理是什麼意思
預處理功能主要包括:
宏定義,文件包含,條件編譯三部分。
分別對應宏定義命令,文件包含命令,條件編譯命令三部分實現。
預處理過程讀入源代碼,檢查包含預處理指令的語句和宏定義,
並對源代碼進行響應的轉換。預處理過程還會刪除程序中的注釋
和多餘的空白字元。
預處理指令是以#號開頭的代碼行。
#號必須是該行除了任何空白字元外的第一個字元。
#後是指令關鍵字,在關鍵字和#號之間允許存在任意
個數的空白字元。整行語句構成了一條預處理指令,
該指令將在編譯器進行編譯之前對源代碼做某些轉換。
指令用途
#空指令,無任何效果
#include包含一個源代碼文件
#define定義宏
#undef取消已定義的宏
#if如果給定條件為真,則編譯下面代碼
#ifdef如果宏已經定義,則編譯下面代碼
#ifndef如果宏沒有定義,則編譯下面代碼
#elif如果前面的#if給定條件不為真,當前條件為真,則編譯下面代碼
#endif結束一個#if……#else條件編譯塊
#error停止編譯並顯示錯誤信息
#else條件編譯的否則選項
#error指令將使編譯器顯示一條錯誤信息,然後停止編譯。
#line指令可以改變編譯器用來指出警告和錯誤信息的文件號和行號。
#pragma指令沒有正式的定義。編譯器可以自定義其用途。典型的用法是禁止或允許某些煩人的警告信息。文件包含
在程序中包含頭文件有兩種格式:
#include<my.h>
#include"my.h"
第一種方法是用尖括弧把頭文件括起來。
這種格式告訴預處理程序在編譯器自帶的或
外部庫的頭文件中搜索被包含的頭文件。
第二種方法是用雙引號把頭文件括起來。
這種格式告訴預處理程序在當前被編譯的
應用程序的源代碼文件中搜索被包含的頭文件,
如果找不到,再搜索編譯器自帶的頭文件。
採用兩種不同包含格式的理由在於,編譯器是
安裝在公共子目錄下的,而被編譯的應用程序
是在它們自己的私有子目錄下的。一個應用程序
既包含編譯器提供的公共頭文件,也包含自定義
的私有頭文件。採用兩種不同的包含格式使得編
譯器能夠在很多頭文件中區別出一組公共的頭文件。
舉個例子:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#defineSIX6
#defineSEVEN7
#defineCube(x)(x)*(x)*(x)
#defineVERSION"tzs"
#definePASTE(n)"最終勝利者是:"#n
#defineNUM(a,b,c)a##b##c
#defineSTR(a,b,c)a##b##c
#defineDEBUG1
intmain()
{
inti;
i=SIX+SEVEN;
printf("i=%d ",i);
i=(SIX*SEVEN);
printf("i=%d ",i);
i=Cube(3);
printf("i=%d ",i);
printf("%s",VERSION);
printf("%s",PASTE(桃子));
puts(PASTE(yy/));
puts(PASTE(xx));
printf("%d ",NUM(1,2,3));
//printf("%s ",STR("aa","bb","cc"));
#ifDEBUG
printf("Debugging ");
printf("Debugging2222 ");
#endif
printf("Running ");
#ifdefinedDEBUG
printf("yes ");
#endif
#if!definedJJ
printf("noJJ ");
#endif
}
㈧ 預處理命令不是C語言本身的組成部分,那它屬於什麼
屬於編譯器的命令,優化這一類的
㈨ 預處理命令不是C語言本身的組成部分,那它屬於什麼
他不屬於C語言本身,是編譯程序不能識別他們,所以必須在對程序進行通常的編譯之前對程序中的特殊命令進行預處理。