2016-12-11 6 views
1

私のプログラムではほとんど警告が表示されません。QT作成者の警告がありません

私のcppファイル:

#include <iostream> 

using namespace std; 

int main() 
{ 
    long long int ll = 100000000067; 
    unsigned short sh = ll; //no warning here, why? 

    cout << sh << " " << ll << endl; 


    int s; //warning only here: warning: unused variable ‘s’ [-Wunused-variable] 

    return 0; 
} 

マイプロファイル:

TEMPLATE = app 
CONFIG += console c++11 
CONFIG -= app_bundle 
CONFIG -= qt 

SOURCES += main.cpp 

QMAKE_CXXFLAGS += -Wall -Wextra -pedantic 

私はcmakeので使用するプロジェクトを試してみたが、結果は同じです。

+0

生成? – Inline

+0

オプション - >ビルド&実行 - >コンパイラ私は持っている:自動検出GCC 64/32ビット。私はデフォルトで64ビットを使用します。 –

+0

GCCのバージョンは何ですか?端末に 'gcc --version'と入力してください。 – Inline

答えて

2

GCCのマニュアルによれば

-Wconversion

値を変更することができる暗黙的な変換のために警告します。これには、xがdoubleのときのabs(x)のような実数と整数の変換が含まれます。 unsigned ui = -1のような符号付きと符号なしの間の変換; sqrtf(M_PI)のような小さな型への変換。 abs((int)x)やui =(unsigned)-1のような明示的なキャストやabs(2.0)のような変換によって値が変更されない場合は警告しないでください。 -Wno-sign-conversionを使用すると、符号付き整数と符号なし整数間の変換に関する警告を無効にすることができます。 C++の場合、ユーザー定義の変換で混乱しているオーバーロード解決を警告します。型変換演算子を使用しない変換:voidへの変換、同じ型、基本クラス、またはそれらへの参照。符号付き整数と符号なし整数間の変換に関する警告は、-Wsign-conversionが明示的に有効にされていない限り、C++ではデフォルトで無効になっています。私にとって

-Wconversionとあなたの例では、あなたが使用しているコンパイラは何だった

~/main.cpp:9: warning: conversion to 'short unsigned int' from 'long long int' may alter its value [-Wconversion] 
    unsigned short sh = ll; //no warning here, why? 
        ^
+0

これは、 '-Wall -Wextra -pedantic'の(一部または全部で)カバーされていないのに驚いています! – usr2564301

関連する問題