《高質量C C編譯預處理

2021-06-26 21:47:03 字數 1650 閱讀 9515

檔案包含

#include <>         //包含開發環境提供的庫標頭檔案

#nclude ""           //包含自己的標頭檔案

也可以使用相對路徑或絕對路徑

如#include ''.\a\b.h"

#include "c:\a\b.h"

內部包含暗哨

#ifdef           _a_h_

#define       _a_h_

#endif                      //防止標頭檔案重複編譯

外部包含暗哨

# if !defined(_a_h_)

#include

#endif                    //可以避免多次查詢和開啟標頭檔案的操作,提高編譯速度

標頭檔案包含的合理順序

1.包含自定義檔案

2.包含第三方庫標頭檔案

3.包含標準標頭檔案

條件編譯

# if !defined(win32)

#error  error:win32 do not exist 

#endif   //若是沒有巨集定義win32,那麼把#error後的字串行輸出到螢幕,程式不會竟如編譯階段。

用於輸出與平台,環境有關的資訊

#和##運算子

#:構串操作符

例:#define stringf(x)    」x=10「                     

printf("%s",string(a));   

結果輸出x=10    不是想要出現的a=10,那是因為」「裡面的字元是不會被巨集定義替換的 ,若是換為      

#define string(x)    #x」=10「                     

printf("%s",stringf(a));   就ok了

#作用就是將實參的字串行轉換為字串常量。

##:合併操作符

#define meto(x,y)      x##y##x

printf("%s",meto(me,to)); 

!這時編譯器會報錯,因為##合併生成的是」識別符號「,若是沒有實現定義這個識別符號,就會報錯。若是之前定義了

char *metome = "metome";就ok了

預定義符號常量:

_line_                    引用該符號的語句的**行號   

_file_                    引用該符號的語句原始檔名稱

_date_                  引用該符號的語句所在原始檔被編譯的日期(字串)

_time_                   引用該符號的語句所在原始檔被編譯的時間(字串)

_timestamp_      引用該符號的語句所在原始檔被編譯的日期和時間(字串)

_stdc_                 標準c語言環境都會定義該巨集以標識當前環境

以上是ansi c的預定義符號常量,編譯器也會在此基礎上定義一些自己的巨集,如——cplusplus.

讀《高質量C C 》 預處理

編譯預處理 編譯預處理器能識別的指令,只在預編譯期起作用,不會進入編譯階段。而常用的預編譯處理,主要有檔案包含,巨集定義,條件編譯 error pragma以及預定義符號常量 1 檔案包含 include 例如 include 開發環境提供的庫標頭檔案 include myhead.h 使用者自定義...

高質量程式設計C C

一 請填寫bool float,指標變數與 零值 比較的 if 語句。10 分 請寫出 bool flag 與 零值 比較的 if 語句。3 分 標準答案 if flag if flag 如下寫法均屬不良風格,不得分。if flag true if flag 1 if flag false if f...

高質量c c 程式設計

第1章 為防止標頭檔案被重複引用,應當用 ifndef define endif 結構產生預處理塊 使用 include引用標準庫標頭檔案,使用 include filename.h 引用非標準庫標頭檔案 標頭檔案中只存放 宣告 不存放 定義 第2章 應在關聯性不強的語句間新增空行 一行 只做一件事...