問題タブ [gcc-pedantic]

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.

0 投票する
3 に答える
3468 参照

c - void ポインターとして配列パラメーターをトラバースする方法

qsortのような同様の「汎用」プロシージャがあります。これには、voidポインタ(配列を指す)と関数ポインタパラメータがあります。この関数は、どのタイプの配列でも機能するはずです。

例:

ただし、これにより次の警告が表示されます (gcc test.c -pedantic-errors):

そして、いくつかの調査の結果、このような void ポインターを使用するのは悪い習慣であることがわかりました。(例: C の void ポインターのポインター演算)

では、標準ライブラリは qsort のようなものをどのように処理するのでしょうか? このコード ( http://aturing.umcs.maine.edu/~sudarshan.chawathe/200801/capstone/n/qsort.c ) を見ると、次のようになります。

実際の型に関係なく (char *) にキャストしていますか?

0 投票する
1 に答える
287 参照

c++ - PAPI をリンクするときにエラーが発生する

Arch Linux x86_64 で、PAPI 5.4.3.0 ライブラリを使用するプロジェクトをビルドしようとしています。

簡単にするために、これらの 2 つのファイルで理解できないことを再現しました。

A.cpp

B.cpp

それを(オブジェクトファイルに)コンパイルすると、次のようになります。

-pedanticフラグでエラーが発生するのに、警告が発生しないのはなぜですか?(2)

3回目の実行で何も発生しないのはなぜですか(インクルードを切り替えるだけです)?

0 投票する
1 に答える
216 参照

c - 構造体 AND 型を警告なしで前方定義する

私たちの大学の宿題提出システムは、プログラミングのスキルに焦点を当てる代わりに、提出物にばかばかしく非現実的な要件を設定しています。これを回避するために、プリプロセッサとその他のいくつかのトリックを使用して、宿題のソリューションを 1 つのファイル (要件の 1 つ) にマージします。

もう 1 つの要件は、警告が発生して-Wpedanticはならず、有効になっていることです。関数呼び出しで使用できるように、 structinを前方宣言します。node.h

別のファイルでは、edge.h完全な定義は次のように読み取られます。

次の警告が表示されます。

私が言ったようにファイルがマージされているので、「main.c」のことで混乱しないでください。

どの前方宣言が正しく、警告はありませんか?

0 投票する
0 に答える
711 参照

c++ - -Wno-pedantic は古い gcc では無視されます

ゼロ引数可変引数マクロを使用している C++ アプリケーションがあります。ただし、さまざまな回答でSOにここに投稿された標準準拠のソリューションはあまり好きではなく、GCC固有のものを維持して##__VAR_ARGS__ください。

ただし、できるだけ多くの警告をキャッチしたいと思います。

私のビルド システムは meson で、オプションを渡し、追加のプロジェクト引数として--buildtype=debugoptimized --warning_level=2 --werror=true指定します。-Wno-pedantic

Ob Ubuntu 18.04、gcc 7.3.0、meson 0.45.1 これにより、コンパイラに次のオプションが追加されます-Wall -Wextra -Werror -Wpedantic -Wno-pedantic -std=c++11。すべてが正常にビルドされます。

CentOS 7.4.1708、gcc 4.8.5、meson 0.44.1 で同じコード、同じオプションを使用すると、まったく同じオプションがコンパイラに追加されますが、コンパイルされず、次のエラーが発生します。

ISO C99 requires rest arguments to be used(可変長マクロの場合)

-Wno-pedanticこのコンパイラでは無視されているようです。

警告オプションを少しいじることはできますが、Ubuntu または CentOS のいずれかでビルドが失敗します。Ubuntu ビルドが失敗した場合、エラー メッセージは少し異なります。

ISO C++11 requires at least one argument for the "..." in a variadic macro

これまでに見つけた両方のビルドを成功させる唯一の解決策は、プロジェクト引数として使用meson --buildtype=plain --warning_level=1 -werror=trueして設定することです。-Wall -Wextra

したがって、これがコンパイラの問題なのか、メソンの問題なのか、それとも私がヒットしている不幸なバージョンの違いなのかはわかりません。