我正在維護一個包含C 、C和一些python檔案的應用程式;所有的可執行檔案都是使用CMake構建的。
我注意到有幾個函式正在使用(void)cast。
示例:
main.c。
typedef void CxType。
int foo(CxType *, const char *, const char *, int , int *)。
//c是一個模板。
// QString &s;
// QMapData::Node *e;
// QScopedPointer<QDataStreamPrivate> d;
//v是另一個模板。
#define foo2(c,s,e,d,v) foo(c,s,e,d,v)
static void some_function( void )
{
(void) foo(param1,param2,...)。
}
根據O'Reilly "C Pocket reference";(void)可以用來明確地拋棄C語言中的運算式的值;例如。 (void)printf("一個例子。")
為什么使用(void)foo(param1,param2,...);而不是簡單的foo(param1,param2,...);?
uj5u.com熱心網友回復:
投向void是為了抑制編譯器對未使用的回傳值的警告。
//至少這很可能是想出這個投遞的天才的意圖。
uj5u.com熱心網友回復:
通常情況下,你只會在兩種情況下將一個運算式投給void。
首先,如果一個函式需要一個你知道不被使用的引數,但由于該函式被用作回呼,所以該引數不能被移除。
第二,如果你正在呼叫一個具有編譯器特定屬性的函式,該屬性導致它在函式的回傳值未被使用時發出警告,但是你知道你不需要讀取它。
這兩種情況都不適用于上面的代碼,所以不需要投幣。
uj5u.com熱心網友回復:
我承認我自己也使用了(void) foo() cast風格;其理由是表明我知道該函式回傳一個值,我故意忽略了這一點。也就是說,這是為讀者(例如,我未來的自己)準備的,而不是為了抑制編譯器的警告,因為流行的C編譯器不會對此發出警告(也許在特定函式上的非標準注釋除外)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/332261.html
標籤:
