問題タブ [gcc-warning]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 次のコードから「異なるサイズの整数からポインタにキャストする」という警告を取得する
コードは次のとおりです。
これが C code pushリターン ABCです
特定の警告の理由は何ですか?
c++ - GCC 3.3.4 での char 配列宣言のエラー
しかし、「フォーマット引数はポインターではありません」というエラーが表示されます
ユーザーからすべての値を取得する配列を宣言するにはどうすればよいですか?
編集 :
これは私のソースコードです。
c++ - C ++ライブラリとリンクするときにOCamlコンパイルでg++非推奨の警告を抑制するにはどうすればよいですか?
-cc g++GCC> = 4.4の引数を使用してC++標準ライブラリ(LLVMのOCamlバインディングなど)を必要とするライブラリにリンクするOCamlプロジェクトをコンパイルするとocamlc、次の形式の非常に冗長な警告が生成されます。
これらの警告を削除するにはどうすればよいですか?
c++ - 特定のディレクトリまたはファイルに対して特定の gcc 警告を有効にする方法は?
重複の可能性:
翻訳単位の一部のみの GCC 警告を選択的に無効にしますか?
特定のディレクトリまたはファイルに対して特定の gcc 警告を有効にする方法は?
他のシステム ヘッダーではなく、自分のファイルに対して-Wsign-conversionを有効にしたい
c++ - GCC の enum スイッチの制御フロー解析が不十分
次の C++ コードでは:
-Wallでコンパイルすると、制御が非 void 関数の終わりに達したという警告が表示されます。なんで?
編集
testこの例の変数に任意の値を含めることができると言うのは、一般的に正しくありません。
foo(12354)コンパイルしません:
12354 は有効なTest値ではないためです (実際にはプレーンCでは有効ですが、C++ では有効ではありません)。
任意の整数定数を列挙型に明示的にキャストできますが、それは未定義の動作と見なされませんか?
g++ - 数行のコードで g++ のすべての警告を無効にする方法
数行のコードですべての警告を無効にする方法。GCC 診断機能を使用して特定の警告を無効にすることができますが、すべての警告のフラグがあります。私はこの方法を試しましたが、うまくいきません
c - フォーマット '%ld' はタイプ 'long int' を想定していますが、引数 3 のタイプは "TEST" です
ここで、TEST は構造体ポインターです。構造体に整数が含まれています。そのための適切な要因は何ですか?TEST の構造は以下の通りです。コンパイラとして gcc を使用しています。
c++ - boost::optional が仮想関数を継承するクラスで失敗するのはなぜですか
boost::optional<> は単純なデータ型には完璧に機能しますが、インターフェイスを実装するクラスから継承するクラスに使用されるとすぐに、厳密なエイリアシングが有効になっていると失敗します。
例:
gcc バージョン 4.4.3 を使用して次のようにコンパイルすると、エラーが発生します。
この問題を解決する最善の方法は何ですか。厳密なエイリアス警告を有効にしたままにしておきたいと思います.boost バージョン 1.44 を使用しています。
アップデート:
ひどくなる!!次のコードを検討してください。
gcc バージョン 4.4.3 を使用して次のようにコンパイルすると、次のようにコンパイルされます。
「//コメント アウト」でマークされた行がコメント アウトされている場合、厳密なエイリアシング警告が表示されます。私はこれを少なくとも20回チェックしました。これは私が今まで見た中で最も奇妙なものの 1 つです。boost::optional が sth を初期化するように見えます。テンプレートパラメータから独立したり、sth で呼び出された場合にのみ boost::optional を理解するようになる gcc のように。最初に些細なこと。何か案は ?
c - 関数の暗黙の宣言
GCCは通常、適切なヘッダーファイルがインクルードされていない場合にこの警告を生成します。このリンク-> www.network-theory.co.uk/docs/gccintro/gccintro_19.htmlは、関数宣言が(ヘッダーを介して明示的に宣言されるのではなく)暗黙的であるため、間違った引数タイプが実際に関数に渡される可能性があることを示しています、誤った結果が得られます。わかりません。これは、コンパイラが、マシンのワードサイズの何かを、呼び出し先が消費できるようにスタックにプッシュし、最高のものを期待するコードを生成することを意味しますか?
詳細は大歓迎です。
c++ - 未使用の一時的なものに対してgcc/g ++警告がないのはなぜですか?
次のコードを検討してください。
(これは、GoFで説明されているオブザーバーパターンの実装です。)ここでのユーザー介入は、attach()とnotify()を同時に実行しないように保護することでした。したがって、boost::unique_lockです。目標は、subscribersコンテナを保護することでした。
しかし、ロックが実際には一時的なものであることに気付くのは非常に困難です(詳しく見てみると、名前は割り当てられていません)。したがって、一時的なものが破棄されると、ミューテックスのロックはすぐに解放されます。つまり、コードはスレッドセーフではありません。このような状況では、コンパイラの警告が予想されます。「未使用の一時的」のようなもの。
さらに悪いことに、cppcheckはこの間違いも認識しません。(cppcheck:ac / c ++コード分析ツールhttp://sourceforge.net/apps/mediawiki/cppcheck/index.php?title=Main_Page)
Gccは、未使用の変数に対して警告を発行します。ここでの一時的な変数は未使用の変数であり、間違いなくプログラマーの不注意の結果です。では、なぜこのような場合に警告がないのでしょうか。たぶん、そのような状況を発見するのは複雑すぎますか?