4

と呼ばれるクラスがMutexLockあります。これは、そのとおりです。構築時にミューテックスをロックし、破壊時に解放します。

    class OpenEXRMutexLock
    {
#ifndef HAVE_PTHREADS
    public:
        OpenEXRMutexLock() : lock(openEXRmutex) { }
    private:
        std::unique_lock<std::mutex> lock;
#endif
    };

HAVE_PTHREADS が定義されている場合、gcc 4.9.1 は未使用の変数について不平を言います:

OpenEXRMutexLock lock;

もちろん、このクラスは、構築と自動破棄以外では決して使用しないことを意図しています。

現在、私は何か醜いことをしました:私は追加しました

void OpenEXRMutexLock::dummyFuncAvoidingWarnings() const {}

そして、どこでもそれを呼び出します:

OpenEXRMutexLock lock;
lock.dummyFuncAvoidingWarnings(); //Eeerk

プロジェクト全体で未使用の変数の警告を無効にせずにこれを回避する方法はありますか?

4

1 に答える 1

5

GCC は、変数の定義がコンストラクター呼び出しを呼び出すかどうかを検出するのに十分スマートです。あなたの場合、コンストラクターが実際に呼び出されることを確認すると (空のものであっても)、変数定義に副作用があるとマークされ、警告が表示されなくなります。

この動作は、古いバージョンの GCC にも当てはまります。

于 2015-03-25T09:51:39.183 に答える