C語言使用巨集所遇到的一點問題

2021-06-18 16:58:58 字數 1246 閱讀 7450

個人感覺比較有意思,所以就記下來了。

關於巨集的使用原則,第一條就是永遠都不要使用巨集。

但是就實際情況而言,除非是極小的程式,否則不使用巨集是不可能的。

關於使用巨集的好處有:

(1)在程式編譯期間即可根據需要按需配置程式功能;

(2)定義一些有意義的常量巨集有助於增加**的可讀性,以及減小**維護的代價。

巨集會在預編譯階段被替換掉。

要小心的是,一定要在使用巨集之前就將巨集定義好。

與巨集比較相似的乙個東西就是inline函式,inline函式的優點有:

(1)在編譯階段會進行型別檢查;

(2)在編譯階段會直接將inline函式**展開到呼叫處,所以不存在函式呼叫的開銷。

inline函式通常適合應用於那些短小的函式中,否則可能會造成程式的size變大。

本人遇到的乙個情況就是,由於檔案比較大,所以一不小心被注意導致巨集定義沒有放到

所有使用巨集的地方的最前面,從而造成執行程式時出現不預期的結果。

測試**如下:

#include

#ifdef enable_feature

int i_g_value = 1;

#else

int i_g_value = 2;

#endif

#define enable_feature

int main(int argc, char* argv)

[sh] gcc -o macro_test_main macro_test_main.c

[sh] ./macro_test_main

i_g_value=2

[sh]

這顯然不是預期的結果。

於是修改程式如下:

#include

#define enable_feature

#ifdef enable_feature

int i_g_value = 1;

#else

int i_g_value = 2;

#endif

int main(int argc, char* argv)

[sh] gcc -o macro_test_main macro_test_main.c

[sh] ./macro_test_main

i_g_value=1

[sh]

這本身是很簡單的問題,但卻有時候不小心就帶來了問題。

所以將這鮮活的案例總結下來,希望自己能夠做的更好;而不是把時間浪費在發生問題之後的除錯上。

C語言中關於巨集 的使用,注意一點

文章 首先已知 define a hello define b world 如何使用巨集a,b表示出字串 helloworld 答案1 define c a b 答案2 define c a,b a b define c a,b c a,b 答案1驗證 例如使用巨集預編譯案例 include def...

C語言中關於巨集定義的一點總結

1 常見的巨集定義語句有不帶引數的巨集定義和帶引數的巨集定義兩種 2 帶引數的巨集定義,在比較複雜時,往往通過 字元進行換行分割,來使其更加清晰。比如 include include define func a,b printf the add of a and b is d n a b int m...

C語言的一點

define tosh assign pin name,port,bit static inline void tosh set name pin static inline void tosh clr name pin 如果在程式中寫了這樣的乙個式子tosh assign pin inc,a,2 ...