問題タブ [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++ - 未定義の動作または誤検知
私は(本質的に)野生で次のものに出くわしました
これは明らかに以前のバージョンのgccではきれいにコンパイルされます(gcc 4.5.1では警告が生成されます)。私が知る限り、警告は-Wsequence-pointによって生成されます。だから私の質問は、これはシーケンスポイント間の変数の操作に関する標準の表現に違反していますか(つまり、仕様ごとに未定義の動作です)、これはgccの誤検知です(つまり、仕様ごとに定義された動作です)?シーケンスポイントの表現は、理解するのが少し難しいです。
私が実際に出くわしたのは(より大きな表現で)
しかし、私はそれが警告にとって重要であるとは思いませんでした(それが問題の核心であると私が想定したものではなく、それが要点である場合は私を訂正してください)。
linux - 警告: 'struct GLUquadric' の前方宣言
私は次のことを得る
このコードで
なぜそうするのか理解しています.GLUquadricObjは実際には前方宣言ですが、
この警告を回避したい。
その唯一の機能について、この警告を抑制したいと思います。
または、正しいヘッダーを含めて警告を解決してください。/usr/include/GL で grep を使用しましたが、完全なタイプが見つかりませんでした。
Arch Linux を使用しています
メサ 7.8.2-3
と
gcc 4.5.1-1
gcc - gcc -rpathと-W1の組み合わせはどういう意味ですか?
それは警告と関係があることがわかりますが、何をしているのか正確にはわかりませman gcc
ん。次のMakefile.amを使用してビルドしています。-W
-W1
Ubuntuでは問題ありませんが、RedHat(RHEL)は「パスは絶対エラーである必要があります」をスローしているため、gtkメーリングリストへの投稿を見つけた後、次のことを試しました。
これは機能しますが、理由がわかりません。Redhatビルドの問題の修正として信頼する前に調べたいと思います。
更新redhatが@MYSQL_PLUGINDIR@へのパスを提供していないため、-rpathが失敗しているようです。
c++ - GCC-初期化されていない構造体について警告しない初期化されたWun
g ++ -Wuninitialized -O2 test.cppは、tmが初期化されていないことを警告しません。Valgrindは、memset行が追加されるまで実行します。Linuxのstrptimeのマニュアルページには、初期化する必要があると書かれており、初期化するまで、より複雑なプログラムでランダム化された日付が表示されていました。このような状況で警告を生成するGCCフラグはありますか?
c - C 警告: 関数の暗黙的な宣言
はい、この質問は何度も聞かれました。私はフォーラムや SO の投稿を探して読んでいますが、回答はすべてこれとは無関係です (またはそう思われます)。だから、私はこのメインファイルを持っています:
-- sgbd_server.c --
次にヘッダーファイル:
-- sgbd_server.h --
-- common.h --
pipe_open
とpipe_close
で定義されている2 つの関数は、基本的にとpipe.c
を返します。この最後のファイルは、Make ファイルで個別にコンパイルされます。0
void
私は Make ファイルの作成の達人ではありませんが、この質問のために、次のようにします。
**注** : このファイルconsole.c
は、コンソールの I/O を制御するためのいくつかの関数を実装しています。ご覧のとおり、これも個別にコンパイルされています。
今、私が入力するmake client
と、すべてがうまくいき、鳥が署名するなどです.しかし、私が入力make server
すると、吐き出します
違いがある場合は、Linux amd64でGCCを実行しています(疑わしい)。
さて、なぜそれについて私に警告するのでしょうか? 2 つの関数はcommon.h
、に含まれている で宣言されsgbd_server.h
ています。
お時間をいただきありがとうございます!
**更新**
ご提案いただきありがとうございます。common.h
インクルードパスのどこかに何らかの形で含まれるファイルがあるかどうかを見つけようとしました...ローカルcommon.h
(sig)の代わりにコンパイルプロセスでスリップしたファイルを見つけることができませんでしたが、いくつかの.ghc
ファイルを見つけましたソースフォルダーに座っています。これらは によってクリーンアップされていないため、make clean
これらのファイルを手動で削除しました。何だと思う?警告なし。これらのファイルとは何ですか?なぜ作成されるのですか?
c++ - -Werror を有効にせずに -Wreturn-type をエラーとして扱うように GCC 4.x に強制しますか?
次のコードがあるとします。
また、GCC バージョン 4.2.1 から options を使用して C++ コンパイラ (C コンパイラではなく) をコンパイルするとします-Wreturn-type -Werror=return-type
。上記の行のコメントを解除せずに上記のコードをそのままコンパイル//#define USE_CXX_CLASS
すると、警告は表示されますが、エラーは表示されません。
しかし、//#define USE_CXX_CLASS
行がコメント解除されている場合、警告はエラーとして扱われます:
はい、1 つは非メンバー関数 (ケース #2) で、もう 1 つは C++ 関数 (ケース #1) です。IMO、それは問題ではありません。両方の条件をエラーとして扱いたいのですが、現時点では-Werror
orを追加したくありません(おそらく後で追加する予定ですが、それはこの質問の範囲外です)。-Wall
私のサブ質問は次のとおりです。
- 私が見逃しているGCCスイッチが機能するはずですか?
#pragma
(いいえ、私は'sを使いたくありません。) - これは、GCC の最新バージョンで対処されたバグですか?
参考までに、私はすでに次のような他の同様の質問に注いでいます。
c++ - __attribute__((warn_unused_result))と同等のMSVC?
__attribute__ ((warn_unused_result))
関数によって返されるエラーコードを無視しないように開発者を促す手段として非常に役立つことがわかりましたが、MSVC、およびgccやICCなどのgcc互換コンパイラで動作するためにこれが必要です。Microsoft Visual Studio C / C ++コンパイラには同等のメカニズムがありますか?(これまでのところ、運が悪かったので、MSDNをくぐり抜けてみました。)
gcc - libwireshark に対するコンパイル
libwireshark
Ubuntu 10.10に対してプログラムをコンパイルしようとしています。と にファイルをインストールしたwireshark-dev
パッケージをインストールしました。/usr/lib/wireshark
/usr/include/wireshark
私の C ソース コード ファイルの先頭には#include <epan/epan.h>
ディレクティブが含まれており、gcc
コマンド ライン引数は次のとおりです。
ただし、これは次のような多くのエラーを返します。
これらの問題を修正するにはどうすればよいですか?
c - C で「関数名」が true と評価される理由と、その警告を受け取る方法
私は最近、ac プログラムを書く gcc 3.2.2 の次の動作に出くわしました:
if ステートメントで、関数の中かっこを忘れて次のように書きました。
if(myFunc)...
それ以外のif(myFunc())...
ほとんどすべての警告をオンにしていますが、これはエラーも警告も生成しませんでした。
単純に と評価されましたtrue
。そもそもなぜこれが合法的なコードを書いているのでしょうか? 関数が存在する/アドレスがあるためですか?そのような間違いを回避する方法や、私が見落とした警告オプションがあるかどうかを知っている人はいますか? この問題は、後の gcc バージョンでより適切に解決されていますか?
完全を期すための正確なコンパイラ呼び出しは次のとおりです。
(私は gcc 3.2.3 を使用せざるを得ないため、-Wextra はありません)
visual-studio-2008-sp1 - 「警告:符号付き整数式と符号なし整数式の比較」と同様のGCC警告をVS2008に発行させる
'int'から'size_t'への変換で説明されたものと同じ行に沿って、結果の符号が変わる可能性があります-GCC、C 、代わりに、GCC4.2.1で受信する警告にもフラグが付けられるようにします32ビットと64ビットの両方のコンパイルでのVS2008SP1では、VS2008に合わせてGCCでの警告を無効にします。
たとえば、64ビット条件下のGCC 4.2.1では、-Wall条件下での警告として次のように表示されます。
GCCの警告は次のとおりです。
ただし、VS2008 SP1 64ビットコンパイラでは、どのタイプのプラグマを試しても、/W3または/W4、または/ w3some_warning_numberまたは/ w4some_warning_numberなどを使用して何を有効にしてもフラグは立てられません。
さて、GCCの警告レベルを下げたり、警告を無効にしたりしたくありません。なぜなら、GCCには非常に正当な理由で警告があったからです。したがって、/ WXが有効になっている場合、VSビルドが同様の方法で失敗するようにしたいと思います。これは私が一緒に暮らさなければならないものですか、それともVS2008でトリックを行う警告がありますか?
編集:警告は、32ビットビルドでは表示されますが、64ビットビルドでは表示されません。以下に示すように、同じコンパイラオプションのセットを使用します。
編集#1:これはVisual Studioの特異性である可能性があるため、Visual C ++ Developer Centerに投稿しました-警告C4018:'<':32ビットでは符号付き/符号なしの不一致が発生しますが、64のVS2008SP1では64ビットのコンパイルでは発生しません-ビットWindows。
編集#2: Visual C++開発者センターの投稿内からMicrosoftConnectに投稿するように指示され、今日(2011-01-11)Microsoftは私の質問に回答し、コンパイラの問題として検証しました:問題が追加されると述べました将来のリリースで修正されるバックログへ:Microsoft Connect-警告C4018:'<':署名付き/署名なしの不一致は同じサイズのタイプ間でのみ発生します。