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 檔案被編譯的...