C語言程式設計 學習筆記 巨集定義

2021-08-31 11:57:29 字數 1913 閱讀 8430

編譯預處理指令

#開頭的是編譯預處理指令

它們不是c語言的成分,但是c語言程式離不開它們

#define用來定義乙個巨集

#define pi 3.14159
這樣pi這個東西就是3.14159的值

在編譯過程中,計算機會把**中出現的pi全部換成3.14159

也可以有如下定義

#define format "%f\n"
那麼,形如

printf(format,2*pi*3.0);
實際上就是

printf("%f\n",2*pi*3.0);
如果給format這個部分加上引號

printf("format",2*pi*3.0);
這樣會**的

#define總結

#define 《名字》《值》

注意沒有結尾的分號,因為不是c的語句

名字必須是乙個單詞,值可以是任何東西

在c語言的編譯器開始編譯之前,編譯預處理程式(cpp)會把程式中的名字替換成值(完全的文字替換)

這就是叫做c語言的巨集

1.如果乙個巨集的值中有其他的巨集的名字,也是會被替換的

2.如果乙個巨集的值超過一行,最後一行之前的行末需要加

3.巨集的值後面出現的注釋不會被當做巨集的值的一部分

對於2的使用方式是這樣:

#define prt printf("%f",pi);\

printf("%f",pi2);

這樣在函式中使用prt;那麼就會執行這2個printf

預定義的巨集:

_file_ 輸出路徑(%s)

_line_ 輸出行號(%d)

_date_ 輸出日期(%s)

_time_ 輸出時間(%s)

帶引數的巨集

巨集可以帶引數,形如

#define cube(x) ((x)*(x)*(x))
使用方法:

printf("%d\n",(5));
這樣計算機在編譯的時候就是

printf("%d\n",(5*5*5));
巨集定義的誤區:

#define radtodeg1(x) (x * 57.29578);

#define radtodeg1(x) (x) * 57.29578;

會導致許多錯誤,在有帶引數的巨集的時候,一切都要用括號括住,如

#define radtodeg1(x) ((x * 57.29578));
巨集定義加分號可能導致的情況:

#define pretty_print(msg) printf(msg);

if(n<10)

pretty_print("aaa");

else

pretty_print("bbb");

如果在巨集定義上加了分號,那麼對於編譯的時候來說,在語句結束後又來了乙個分號,相當於加了個空行 這樣if和下面的else就連線不上關係了,對於編譯接收過來的資訊,就只有單單乙個if語句

帶引數的巨集

在大型程式的**中使用非常普遍

可以非常複雜,如「產生」函式(在#和##這兩個運算子的幫助下)

存在中西方文化差異(西方人很喜歡)

部分巨集會被inline函式(c++)替代

巨集定義 C語言基礎學習筆記

define include ifndef define maxszie 10000帶引數的巨集 define add x,y x y define plus x,y add x,y define add x,y x y 呼叫 plus plus a,b c 呼叫結果 就是按照順序巢狀 最終 c b...

C語言學習筆記 巨集定義

define 叫做巨集定義命令,它也是c語言預處理命令的一種。所謂巨集定義,就是用乙個識別符號來表示乙個字串,如果在後面的 現了該識別符號,那麼就全部替換成指定的字串。巨集定義是由源程式中的巨集定義命令 define完成的,巨集替換是由預處理程式完成的。define 巨集名 字串 表示這是一條預處理...

c語言學習筆記之巨集定義

1 巨集名的命名規範 全部大寫有多個單詞中間使用下劃線隔開 常用 以k開頭的駝峰標識 不常用 2 程式執行過程 源 編譯預處理 編譯 鏈結 執行 3 編譯預處理指令 在編譯前進行解析處理的指令 編譯預處理指令包括 1.巨集定義 define 1.1 不帶引數巨集定義 1.2 帶引數的巨集定義 2.條...