關於巨集需要注意的問題
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....