クロスプラットフォーム アプリケーションを所有していますが、いくつかの関数では関数に渡される値がすべて利用されていません。そのため、未使用の変数があるという警告が GCC から表示されます。
警告を回避するための最良のコーディング方法は何でしょうか?
関数の周囲に #ifdef がありますか?
#ifdef _MSC_VER
void ProcessOps::sendToExternalApp(QString sAppName, QString sImagePath, qreal qrLeft, qreal qrTop, qreal qrWidth, qreal qrHeight)
#else
void ProcessOps::sendToExternalApp(QString sAppName, QString sImagePath, qreal /*qrLeft*/, qreal /*qrTop*/, qreal /*qrWidth*/, qreal /*qrHeight*/)
#endif
{
これは非常に醜いですが、コンパイラが好む方法のようです。
それとも、関数の最後にある変数にゼロを代入するのでしょうか? (これは、コンパイラの警告を黙らせるためにプログラム フロー内の何かを変更するので嫌いです)。
正しい方法はあるのでしょうか?
ベストアンサー1
あなたはできる(void)var;
「 」式に入れる(何もしない) ので、コンパイラはそれが使用されていることを認識します。これはコンパイラ間で移植可能です。
例えば
void foo(int param1, int param2)
{
(void)param2;
bar(param1);
}
または、
#define UNUSED(expr) do { (void)(expr); } while (0)
...
void foo(int param1, int param2)
{
UNUSED(param2);
bar(param1);
}