2013-05-22 6 views
7

は、次のコードを考えてみましょう:なぜ暗黙のdoubleからintへの変換にclangまたはgccフラグを設定しないのですか?

void f(int x) 
{ 
    std::cout << x << std::endl; 
} 

int main() 
{ 
    double x = 1.5; 
    f(x); 
    return 0; 
} 

これは、コンパイルし、実行するすべての警告なし(-Wallを使用して)、したがって、intに、二重の危険な暗黙のキャストを隠します。

f(1.5) 

のように、関数がリテラルで呼び出された場合、コンパイラはキャストをキャッチしますが、これはすべて役に立ちません。なぜこれらのコンパイラがこのキャストの警告を出さないのですか?私はOSX 10.8.3でgcc-4.2.1とclang-425.0.28を使っています。後世のために

+2

'-Wconversion'フラグがありますが、これはgcc 4.3でのみサポートされています。 –

+0

それは実際に働いた(clangの下で) - なぜその旗がウォールに含まれないのですか? – giogadi

+0

これは、有効なコードの警告を生成する可能性があり、暗黙的な変換を使用する多くのコードがあります。 –

答えて

9

-Wconversionフラグを使用して、暗黙的な変換を避けるために(これは-Wallに含まれていません)。 Clangは実際には-Weverythingフラグに-Wconversionを含みますが、このフラグはほとんどのユーザーが慣れているよりもかなり多くの警告を可能にします。

関連する問題