預處理預編譯
預編譯又叫預處理是在編譯之前完成的事情,主要是完成宏替換、文件包含和條件編譯的處理
處理完的結果還是C程序,不是機器語言
而編譯就是要把C語言的程序變成機器語言了
② 編譯和預編譯有什麼區別。
預編譯又稱為預處理,是做些代碼文本的替換工作。
處理#開頭的指令,比如拷貝#include包含的文件代碼,#define宏定義的替換,條件編譯等
就是為編譯做的預備工作的階段
主要處理#開始的預編譯指令
編譯(compilation , compile) 1、利用編譯程序從源語言編寫的源程序產生目標程序的過程。 2、用編譯程序產生目標程序的動作。 編譯就是把高級語言變成計算機可以識別的2進制語言,計算機只認識1和0,編譯程序把人們熟悉的語言換成2進制的。
③ 預處理,預編譯
一回事
http://blog.csdn.net/jdocument/archive/2005/11/17/531499.aspx
http://blog.csdn.net/lwl_ls/archive/2006/04/26/678611.aspx
④ 預處理是在編譯之前完成的是什麼意思 是在我按下編譯按鈕之前
呵呵,當然不是。
我來描述一下當你按下IDE,即集成開發環境中的編譯按鈕的時候,後台發生了什麼,你就會明了。
我們所說的編譯,比較籠統。嚴格或者說是原始意義上的編譯是指將源代碼翻譯成機器二進制碼。其實真正完成從源代碼到機器碼,要分為幾個階段的,具體情況要看是什麼語言,還有編譯器提供的擴展性特性。但是一般情況下都包含一下幾個階段;
首先,是預編譯。這時候不是真正的編譯,而是預處理,比如說進行宏展開。
接著就是編譯。這是比較粗糙的說法,因為編譯階段也可以分為詞法分析、語法分析、語言分析、中間代碼產生、代碼優化、產生機器碼等階段,這個是編譯原理課程的內容。
所以當你按下編譯按鈕的時候,編譯環境會進行預編譯,然後才是真正的編譯。
現代的圖形界面集成開發環境的出現和流行,使得編譯的過程往往被很多人所忽視。
any questions?
⑤ c語言程序,預編譯的作用是什麼
預編譯又稱為預處理 , 是做些代碼文本的替換工作。
處理 # 開頭的指令 ,
比如拷貝 #include 包含的文件代碼,
#define 宏定義的替換 , 條件編譯等,
就是為編譯做的預備工作的階段,主要處理#開始的預編譯指令,預編譯指令指示了在程序正式編譯前就由編譯器進行的操作,可以放在程序中的任何位置。
c 編譯系統在對程序進行通常的編譯之前,先進行預處理。 c 提供的預處理功能主要有以下三 種:
1)宏定義 #definemin(a,b)((a)>(b)?(b)::(a))
2 )文件包含 如:#include<stdio.h>
3 )條件編譯#ifndefGRAPHICS_H
#defineGRAPHICS_H
*****
#endif
#ifdefGRAPHICS_H
*****
#else
*****
#endif
⑥ 什麼是預編譯,何時需要預編譯
預編譯又稱為預處理,是做些代碼文本的替換工作
預編譯又稱為預處理,是做些代碼文本的替換工作
處理#開頭的指令,比如拷貝#include包含的文件代碼,#define宏定義的替換,條件編譯等
就是為編譯做的預備工作的階段
主要處理#開始的預編譯指令
預編譯指令指示了在程序正式編譯前就由編譯器進行的操作,可以放在程序中的任何位置。常見的預編譯指令有:
(1)#include 指令
該指令指示編譯器將xxx.xxx文件的全部內容插入此處。若用<>括起文件則在系統的INCLUDE目錄中尋找文件,若用" "括起文件則在當前目錄中尋找文件。一般來說,該文件是後綴名為"h"或"cpp"的頭文件。
注意:<>不會在當前目錄下搜索頭文件,如果我們不用<>而用""把頭文件名擴起,其意義為在先在當前目錄下搜索頭文件,再在系統默認目錄下搜索。
(2)#define指令
該指令有三種用法:
第一種是定義標識,標識有效范圍為整個程序,形如#define XXX,常與#if配合使用;
第二種是定義常數,如#define max 100,則max代表100(這種情況下使用const定義常數更好,原因見注1);
第三種是定義"函數",如#define get_max(a, b) ((a)>(b)?(a):(b)) 則以後使用get_max(x,y)就可以得到x和y中較大的數(這種方法存在一些弊病,見注2)。
第四種是定義"宏函數",如#define GEN_FUN(type) type max_##type(type a,type b){return a>b?a:b;} ,使用時,用GEN_FUN(int),則此處預編譯後就變成了 max_int(int a,int b){return a>b?a:b;},以後就可以使用max_int(x,y)就可以得到x和y中較大的數.比第三種,增加了類型的說明。
(3)#if、#else和#endif指令
這些指令一般這樣配合使用:
#if defined(標識) //如果定義了標識
要執行的指令
#else
要執行的指令
#endif
在頭文件中為了避免重復調用(比如說兩個頭文件互相包含對方),常採用這樣的結構:
#if !(defined XXX) //XXX為一個在你的程序中唯一的標識符,
//每個頭文件的標識符都不應相同。
//起標識符的常見方法是若頭文件名為"abc.h"
//則標識為"abc_h"
#define XXX
真正的內容,如函數聲明之類
#endif
⑦ python預編譯是什麼意思
預編譯又稱為預處理,是做些代碼文本的替換工作。處理#開頭的指令,比如拷貝#include包含的文件代碼,#define宏定義的替換,條件編譯等,就是為編譯做的預備工作的階段主要處理#開始的預編譯指令。
編譯(compilation , compile)
1、利用編譯程序從源語言編寫的源程序產生目標程序的過程。
2、用編譯程序產生目標程序的動作。 編譯就是把高級語言變成計算機可以識別的2進制語言,計算機只認識1和0,編譯程序把人們熟悉的語言換成2進制的。
更多Python知識請關注Python視頻教程欄目。
⑧ C語言:預編譯是什麼
預編譯,顧名思義,從字面上看,就是提前編譯,它做的是工作就是為正式編譯做准備
它說處理的是有#標識的代碼,如講include的文件進行拷貝、#define的條件編譯等等!關於預編譯的介紹你可以到網路里進行查看,裡面有詳細的介紹!http://ke..com/view/176610.htm
⑨ 預編譯和預處理有什麼區別,他們是一樣的嗎
預編譯(預處理)就是在正式編譯之前的,為正式編譯做准備,處理以#開頭的指令,兩者是一樣的,只是兩種叫法而已
⑩ c語言預處理
其實網路文庫也講得挺明白的,你可以打開一個.h的頭文件看看裡面,對應這三點,就很清楚了。一.宏定義1.不帶參數的宏定義: 宏定義又稱為宏代換、宏替換,簡稱「宏」。 格式: #define 標識符 字元串 其中的標識符就是所謂的符號常量,也稱為「宏名」。 預處理(預編譯)工作也叫做宏展開:將宏名替換為字元串。 掌握"宏"概念的關鍵是「換」。一切以換為前提、做任何事情之前先要換,准確理解之前就要「換」。 即在對相關命令或語句的含義和功能作具體分析之前就要換: 例: #define PI 3.1415926 把程序中出現的3.1415926全部換成PI 說明: (1)宏名一般用大寫 (2)使用宏可提高程序的通用性和易讀性,減少不一致性,減少輸入錯誤和便於修改。例如:數組大小常用宏定義 (3)預處理是在編譯之前的處理,而編譯工作的任務之一就是語法檢查,預處理不做語法檢查。 (4)宏定義末尾不加分號; (5)宏定義寫在函數的花括弧外邊,作用域為其後的程序,通常在文件的最開頭。 (6)可以用#undef命令終止宏定義的作用域 (7)宏定義可以嵌套 (8)字元串" "中永遠不包含宏 (9)宏定義不分配內存,變數定義分配內存。 2.帶參數的宏: 除了一般的字元串替換,還要做參數代換 格式: #define 宏名(參數表) 字元串 例如:#define S(a,b) a*b area=S(3,2);第一步被換為area=a*b; ,第二步被換為area=3*2; 類似於函數調用,有一個啞實結合的過程: (1)實參如果是表達式容易出問題 #define S(r) r*r area=S(a+b);第一步換為area=r*r;,第二步被換為area=a+b*a+b; 正確的宏定義是#define S(r) (r)*(r) (2)宏名和參數的括弧間不能有空格 (3)宏替換只作替換,不做計算,不做表達式求解 (4)函數調用在編譯後程序運行時進行,並且分配內存。宏替換在編譯前進行,不分配內存 (5)宏的啞實結合不存在類型,也沒有類型轉換。 (6)函數只有一個返回值,利用宏則可以設法得到多個值 (7)宏展開使源程序變長,函數調用不會 (8)宏展開不佔運行時間,只佔編譯時間,函數調用占運行時間(分配內存、保留現場、值傳遞、返回值) 編輯本段二. 文件包含一個文件包含另一個文件的內容 格式: #include "文件名" 或 #include <文件名> 編譯時以包含處理以後的文件為編譯單位,被包含的文件是源文件的一部分。 編譯以後只得到一個目標文件.obj 被包含的文件又被稱為「標題文件」或「頭部文件」、「頭文件」,並且常用.h作擴展名。 修改頭文件後所有包含該文件的文件都要重新編譯 頭文件的內容除了函數原型和宏定義外,還可以有結構體定義,全局變數定義: (1)一個#include命令指定一個頭文件; (2)文件1包含文件2,文件2用到文件3,則文件3的包含命令#include應放在文件1的頭部第一行; (3)包含可以嵌套; (4)<文件名>稱為標准方式,系統到頭文件目錄查找文件, "文件名"則先在當前目錄查找,而後到頭文件目錄查找; (5)被包含文件中的靜態全局變數不用在包含文件中聲明。 編輯本段三. 條件編譯有些語句行希望在條件滿足時才編譯。 格式:(1) #ifdef 標識符 程序段1 #else 程序段2 #endif 或 #ifdef 程序段1 #endif 當標識符已經定義時,程序段1才參加編譯。 格式:(2) #ifndef 標識符 格式:(3) #if 表達式1 程序段1 #else 程序段2 #endif 當表達式1成立時,編譯程序段1,當不成立時,編譯程序段2。 使用條件編譯可以使目標程序變小,運行時間變短。 預編譯使問題或演算法的解決方案增多,有助於我們選擇合適的解決方案。 此外,還有布局控制:#pragma,這也是我們應用預處理的一個重要方面,主要功能是為編譯程序提供非常規的控制流信息。