預編譯 關於 和

2021-07-24 08:05:11 字數 1012 閱讀 2509

1、在c語言巨集中,#的功能是將器後面的巨集引數進行字串化操作,對它所引用的巨集變數通過替換後在其左右各加上乙個雙引號

#define warn_if(exp)   \

do \

while(0)

那麼實際使用中會出現下面所示的替換過程:

warn_if (divider == 0);

被替換為

do while(0);

這樣每次divider(除數)為0的時候便會在標準錯誤流上輸出乙個提示資訊。

2、##被稱為連線符,用來將兩個token連線為乙個token。注意這裡連線的物件是token就行,而不一定是巨集的變數。例如,你要做乙個選單項命令名和函式指標組成的結構體的陣列,並且希望在函式名和選單項命令名之間有直觀的、名字上的關係

struct command

;#define command(name)

然後用一些預先定義好的命令來方便地初始化乙個command結構的陣列。

struct command commands=

command

巨集在這裡充當乙個**生成器的作用,這樣可以在一定程度上減少**密度,間接地也可以減少不留心所造成的錯誤。還可以n個##符號連線n+1個token,這個特性也是#符號所不具備的

#define link_multiple(a,b,c,d) a##_##b##_##c##_##d

typedef_struct_record_type link_multiple(name,company,position,salary);

這裡這個語句將展開為

typedef struct_record_type name_company_position_salary;

JS預編譯 函式預編譯和全域性預編譯

預編譯發生在函式執行前一步 建立ao物件 執行期上下文 找形參和變數宣告,將變數和形參名作為ao 屬性名,值為undefined 將實參值和形參統一 在函式體裡面找函式宣告,值賦予函式體 結果 預編譯過程 函式馬上要執行,但是還沒執行 首先建立ao物件,也就是函式它產生的儲存空間庫 ao,b und...

關於預編譯頭

一 什麼是預編譯頭?預編譯頭物理上與通常的的.obj檔案是一樣的,但編譯入預編譯頭的.h,c,cpp檔案在整個編譯過程中,只編譯一次,如預編譯頭所涉及的部分不發生改變的話,在隨後的編譯過程中此部分不重新進行編譯。進而大大提高編譯速度,並便於對頭檔案進行管理,也有助於杜絕重複包含問題。二 什麼時候使用...

關於CSS預編譯

背景 大廠的任職要求裡還有一條是 熟悉使用sass.less等css預編譯工具。學習一樣東西的第一步就是首先知道它是什麼 有人開發了一些擴充套件css功能的寫法,比如less,sass,其目的是讓css能支援一些程式語言才有的功能,比如 表示式,函式,變數,迴圈,判斷.有這些功能就能方便重複定義,寫...