關於巨集需要注意的問題

2021-08-05 18:53:56 字數 1324 閱讀 1650

關於巨集需要注意的問題

1.#define巨集與函式之間的優劣:

巨集的執行速度比函式快得多,函式需要呼叫、返回等操作。函式只能對特定的型別操作,而巨集是型別無關的,巨集還可以實現一些函式無法實現的操作。但巨集需要將所有**拷貝到呼叫程式中,增加了**長度。

所以:巨集比較適合執行簡單的計算,如求2個值中的較大值。  如果巨集**比較長,並且頻繁被呼叫,還是宣告為函式比較好。

2.預定義符號(由預處理器定義的符號)  

有_file_ ,  _line_ , _date_ , _time_ , _stdc_

3.注意巨集使用中的一些細節   

(1)  如下:

#define print(format, value)            \

printf(「the value of 」 #value);       \

「is」 format 「\n」, value )

print(「%d」, x + 3);

輸出為: the value of x + 3 is 25

printf() 函式的第乙個引數必須為字串,所以比必須在value前面加上#。#value的目的就是將巨集引數value轉換為字串形式。

(2 )  ##的作用:        

把兩邊的符號連線成乙個符號。如下:

#define add_to_sum( sum_number, value )    \

sum ## sum_number += value

add_to_sum( 5, 25 );                      // sum5 += 25;

(3)巨集定義中的引數往往要打上不止一層的括號。

4.  一些巨集命令:

(1)  #undef    name          將乙個巨集定義移除(比如乙個現存的名字需要被重新定義,那舊定義必須首先被移除)。

(2)  條件編譯

#if  constant-expression  

statements

#elif  constant-expression

otherstatements

#else 

otherstatements

#endif

(3)是否被定義:              

#if    defined(symbol)

#ifdef  symbol

#if    !defined(symbol)

#ifndef  symbol

(4)#error          用來生成錯誤指令。      

(5)#line     

(6)#progma

使用巨集需要注意的地方

ddk提供了大量的巨集。在使用這些巨集的時候,要注意一種錯誤的發生,這就是 側效 side effect 巨集一般由多行組成,如下面的形式,其中的 代表換行 define print msg kdprint n kdprint msg kdprint n 在c語言中規定,for或者if語句塊中的內容...

需要注意的問題

決策樹id3和c4.5的差別?各自優點?boost演算法 cart 回歸樹用平方誤差最小化準則,分類樹用基尼指數最小化準則 gbdt與隨機森林演算法的原理以及區別。優化演算法中常遇到的kkt條件?作用是?最近鄰演算法knn 分類與回歸 l1和l2函式?l1和l2正則項的比較,如何解決 l1 求導困難...

Qml settings 需要注意的問題

qml 中使用 settings 可以儲存一些簡單的資訊,例如使用者名稱,密碼,視窗位置,大小等,沒有sqlite那麼麻煩,簡單易用哦 環境 qt5.8 for android windows 7 main.qml import qtquick 2.7import qtquick.window 2....