2016年12月13日

[C++] 關閉特定程式碼區塊的 unused parameter 警告

部分的 C++ compiler 可以在 function 有參數沒有被使用到時給出警告,像是 g++ 可以透過 -Wunused-parameter 開起這項功能 (印象中有包含在 -Wall 裡),雖然這類的警告可以在編譯階段就發現一些潛在問題,不過偶而還是會造成一點困擾:對,就是使用既有的 library 時。這時候如果可以只把一些確定沒有問題的警告關掉,對於像我這樣有強迫症的人來說心情會好很多。

舉個例子吧,有些 library 在設計時會有一個參數是要提供 callback function,當然 callback function 會有既定的 prototype,像是

bool callback(int target, void* arg);

類似像這樣的 callback function可以在 std::sort 看到,大抵上就是在這個 library 在運作到特定情況時就會呼叫這個 callback function,於是使用者可以在這個 callback function 自行寫入想要被執行的功能,已 std::sort 來說,他的 callback function (也就是 prototype 中的 Compare) 就是當 2 個元素要比較大小時就會被呼叫,所以使用者可以自行決定 2 個元素要怎麼比較大小。

有些 API 在設計時會多提供一個非必要的參數,讓使用者可以傳入其他所需要的資訊到 callback function 中,以上面那個小例子來說,可以把 arg 當成這類的用途。當使用者有幣要資訊要傳入 callback 時,可以透過 arg 傳進去,那如果沒有呢?就丟一個自訂的預設值就好,這樣的 API 在使用上就有更多的彈性。

問題就在這邊:如果我不需要用到 arg,但是 -Wunused-parameter 就是會跳出警告說 arg 沒有被使用到,這時後可以這樣子做:

(void)arg;

像這樣插入一行沒有任何用途的程式碼既能避免多做無謂的事影響效能,又能明確的關掉警告

沒有留言:

張貼留言