2011-12-13 140 views
0

可能重複使用:
What is the purpose of the statement 「(void)c;」?是什麼`(無效)的D'

class ArgString : public Arg::Base 
{ 
public: 
    ... 
    bool CanConvertToInt() const 
    { 
     const char *cstr = mValue.c_str(); 
     char *result = 0; 
     long d = strtol(cstr, &result, 10); 
     (void) d; // what is the usage of this line? 
     return result != cstr; 
    } 

private: 
    std::string mValue; 
}; 

誰能告訴我下面的行的目的是什麼?

(void) d; 

謝謝

// //更新

正如一些人指出,該行的目的是抑制編譯警告。對我來說,這很奇怪。因爲這是非常嚴重的警告

warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use 
_CRT_SECURE_NO_WARNINGS. See online help for details. 

爲什麼我們忽略這個大的警告,並只處理較小的警告。

+0

我不知道目的是什麼,但它恕我直言,聲明不產生任何效果;-) – emesx 2011-12-13 16:59:05

+0

請注意,這是你有控制權的代碼,請評論答案後。 – 111111 2011-12-13 16:59:35

回答

4

模式(void)d通常會告訴代碼分析器您明確忽略函數的返回值。許多C分析人員認爲忽略返回值是錯誤的,因爲它可能導致忽略故障。這是一種說「我打算這麼做」的方式。

3

我唯一見過類似的東西是爲了防止對未使用變量的警告。將一些東西投射到(void)絕對沒有什麼,但它算作變量的用法。

1

它避免了未使用的變量警告。我已經看到這用於聲明宏,以便在發佈時不會得到未使用的變量警告。它評估爲無操作。