問題タブ [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++ - Pedantic gcc警告:関数戻り型の型修飾子
C++コードをGCC4.3で初めてコンパイルしたとき(4.1、4.0、3.4で-Wall -Wextra
オプションを指定して警告なしで正常にコンパイルした後)、突然、フォームのエラーが大量に発生しましたwarning: type qualifiers ignored on function return type
。
考えてみてくださいtemp.cpp
:
実行中g++ temp.cpp -Wextra -c -o blah.o
:
誰かが私が間違っていることを教えてもらえますか?それはC ++標準に違反していますか?値で返す場合、先頭const
は不要だと思いますが、なぜ警告を出す必要があるのか理解できません。constをやめるべき他の場所はありますか?
gcc - Cでリテラルを型キャストする方法
私は小さなサンプル関数を持っています:
私のコンパイラは、比較(x> = VALUE)がすべての場合に真であると警告します。これは、xが符号なし文字であり、VALUEが値0で定義されているためです。そこで、コードを次のように変更しました。
しかし、警告が再び来ます。3つのGCCバージョンでテストしました(すべてのバージョン> 4.0、場合によっては-Wextraを有効にする必要があります)。
変更されたケースでは、この明示的なキャストがあり、signedint比較である必要があります。比較が常に真実であると主張するのはなぜですか?
c++ - 未使用の変数に関する警告を消音するにはどうすればよいですか?
クロスプラットフォームアプリケーションを使用していますが、一部の関数では、関数に渡されるすべての値が使用されているわけではありません。したがって、GCCから、未使用の変数があることを通知する警告が表示されます。
警告を回避するための最良のコーディング方法は何でしょうか?
関数の周りの#ifdef?
これはとても醜いですが、コンパイラが好む方法のようです。
または、関数の最後で変数にゼロを割り当てますか?(これは、プログラムフロー内の何かを変更して、コンパイラの警告を消音するため、嫌いです)。
正しい方法はありますか?
xcode - 警告を抑制するためのgcc/Xcodeプラグマはありますか?
Javaのアノテーション#pragma
と同様に、gcc / Xcodeに特定の警告を抑制させる方法はありますか?@SuppressWarning
原則としてコンパイルします-Wall
が、特定の警告を無視したい場合があります(たとえば、何かをデバッグするためだけにクイック/ダーティコードを記述している場合)。
私は「コードを修正する」という答えを探していません。
c - C: long から int への暗黙的な変換について警告する
long から int への暗黙的な変換に時間がかかるたびに警告をスローするようにコンパイラ (私は gcc バージョン 4.1.2 20080704 (Red Hat 4.1.2-46) または icc 11.1 を使用しています) に指示する方法があるかどうか疑問に思っていました。場所。たとえば、test.c
次のコードを含むファイルをコンパイルします。
と:
警告は生成されません。結果のバイナリを次のように実行します
予想通り、私は得る:
数値 12345678901 は int をオーバーフローしましたが、long をオーバーフローしませんでした。このようなことが起こる可能性があるときはいつでも、コンパイラーに教えてもらいたいです。オプション -Wconversion は予期せず (私には) それを行いません。
ありがとう、
ミケーレ
gcc - ライブラリヘッダーからの GCC 警告を抑制する方法は?
log4cxx、boost などのライブラリを使用するプロジェクトがあり、そのヘッダーは多くの (反復的な) 警告を生成します。ライブラリ インクルード (つまり #include <some-header.h>) または特定のパスからのインクルードからの警告を抑制する方法はありますか? 関連情報が不明瞭になることなく、プロジェクトコードで通常どおり-Wallおよび/または-Wextraを使用したいと思います。現在、make 出力で grep を使用していますが、もっと良いものが欲しいです。
c - C/GCC 警告 - 一度書いたらどこでもテスト?
ANSI C でコマンド ライン プログラムを作成して、Quake 2 マップ ファイルを解析し、使用されているエンティティとテクスチャの数を報告しています。私の開発マシンは MacBook です。OS X Snow Leopard (32 ビット)、Windows XP (32 ビット) と Vista (64 ビット)、および Ubuntu 9.10 (32 ビット) でテストしています。
コードは OS X と GCC 4.2 で完璧です。他のプラットフォームは、それほど完璧ではありません。
Visual Studio 2005 は、main() ブロックの途中での配列宣言について不平を言いました -- 配列のサイズ情報はそれまで利用できません -- それは一番上で宣言されるべきです。一番上にポインタを宣言し、配列を作成する関数を書くことで修正しました。
Windows 上の Dev-C++ および GCC (3.4) には不満はありません。
Windows 上の Cygwin と GCC (4.4) は、配列の添え字が char 型であることに不満を持っていました。それを修正するために (int) キャストを追加しました。
Ubuntu と GCC (4.4) は、fread の戻り値を無視することに文句を言っています。私はUbuntuがGCCをパッケージ化する方法のバグかもしれないと他の場所で読みましたが。私が fread を使用しているコンテキストでは、これは無視しても安全かもしれません。警告は -O3 フラグでのみ表示されます。
Visual Studio 2005 を除いて、私がテストしたすべてのコンパイラは GCC の特定のバージョンです。これらすべてのエラーと警告を追跡することは、お尻の深刻な痛みです。これまで、Makefile で次のフラグを使用していました。
デバッグ: -pedantic -Wall
リリース: -O3
主な開発マシンですべてのエラーをキャッチするために使用する GCC フラグのセットはありますか? それとも、一度書けばどこでもテストできるというのは現実なのでしょうか?
c - 32〜64ビット用に記述されたCソースコードの移植
私が64ビットに移植しようとしているCソースコードは、32ビット環境では警告なしに実行されます。コンパイルgcc(Ubuntu 4.4.1-4ubuntu9)4.4.1を使用して64ビットLinux環境でコンパイルすると、主に次の警告が表示されます。
上記の警告が最も多かった。uintptr_tタイプを使用しましたが、これらの警告のほとんどが削除されました。uintptr_tを使用して、型int /unsignedint を64ビットに変更できます。しかし、64ビットと互換性を持たせるために次のタイプを変更するにはどうすればよいですか?
次のコードを変更しました。
の中へ
次の警告が表示されました。
さらに、タイプdefを以前はintまたはunsigned intであったuintptr_tに変更した後、次のようなほとんどの警告が発生します。
関数tptp_StringCopyは次のとおりです。
これらの警告を取り除くにはどうすればよいですか?