C和指標 ch14 預處理器

2021-10-13 09:55:36 字數 1804 閱讀 1064

c語言巨集用的很多很多,看看stdio.h等各種標頭檔案或者開源專案中的應用就懂了,各種巨集定義,坑點也是蠻多的,需要學習並注意。

見名知意。方便修改、維護。

考查__file__巨集及__line__的使用,以及引數轉字串的方法, 引數前加#即可。見demo02.c

a. 3 2 3 b. 5 3 5 c. 2 4 20 d. 2 4 12。常規問題。

經常被呼叫,那麼速度就是最重要的,使用函式開銷大,所以使用巨集定義來提高速度。

這個巨集明顯具有***了,這個依賴性非常危險,很容易造成越界情況,應該是陣列元素為奇數的情況下就會產生越界情況。為啥要這樣來求sum呢?

沒錯。這種巢狀的定義有層數的限制,且在此不會到達這個層數限制。首先在此是有條件編譯指令的,無論包含哪個檔案,首先定義它自己的符號然後把另乙個也包括進來。當它試圖再次包含第乙個時,整個檔案被跳過。

sizeof()在此不能作為乙個常量表示式,其值是在預處理器完成後才工作計算的。另一種方法是使用limits.h包含檔案中定義的值。

#if#elif的配合使用,最後補乙個#else即可。其實感覺和if-else巢狀一毛一樣啊。見demo03.c

p291-p292#progma這不知道是啥意思…我只見過#pragma#pragma once哈哈。

巨集在大的專案中是經常用到的,看到部分小的開源庫、開源專案就各種的巨集定義…這塊知識不難,但是很顯然,自己在課下練習的時候,**量都比較少,巨集用的都比較少,所以這塊的知識還是需要留意的。

條件編譯經常用來注釋**…用其來除錯**也是很不錯的選擇。

巨集與函式的區別和優劣對比,重要:

p285 #undef中說明名字需要被重新定義,要移除後再重新定義。其實可以編譯過,但是在我這報乙個警告。會以最新的定義將同名的巨集覆蓋掉。

預處理器符號。 5 個預處理器定義的符號,挺好用的,注意下就行了。

命令列定義有點秀,-d選項,就不需要自己進入**中重複修改了。-uname會將程式中的name的初始定義被忽略,一般結合條件編譯使用。

條件編譯的巢狀使用,用的太少了。

檔案包含,與巢狀檔案包含。#pragma once保證只宣告一次。

#line這個黑科技,用以修改__file____line__

C和指標14章 預處理器筆記

1.define define name stuff 當有name出現時,預處理器就會把它替換成stuff 當stuff非常長的時候,可以分成好幾行,除了最後一行外,每行都要加上乙個反斜槓 define debug print printf file s line d x d,y d,z d fil...

《C和指標》第14章 預處理器

14.2.1 巨集 define包括乙個規定,允許把引數替換到文字中,這種實現通常稱為巨集 macro define square x x x 則程式中的square 5 會被替換成 5 5 警告 例1 a 5 printf d n square a 1 會被替換成5 1 5 1,列印結果是11,不...

C和指標(第14章 預處理器)

程式編寫,編譯第一步就是巨集的宣告,也稱預處理器階段,在編譯之前,有刪除注釋,插入被 include指令包含的檔案的內容 和 define所替換的符號等。14.1 五種預處理符號 file name.c 進行編譯的源檔名 line 25 檔案當前的行號 date jan 14 2019 檔案被編譯的...