2017-09-09 11 views
-1
T offset = ps->first, prev_offset; 
bool first = true; 

while (1) { 
    if (first) 
    first = false; 
    else 
    assert(offset > prev_offset); 
    pl = l.find_inc(offset); 
    prev_offset = offset; 
    if (pl == l.m.end()) 
    break; 
    while (ps != s.m.end() && ps->first + ps->second <= pl->first) 
    ++ps; 
    if (ps == s.m.end()) 
    break; 
    offset = pl->first + pl->second; 
    if (offset <= ps->first) { 
    offset = ps->first; 
    continue; 
    } 
} 

を使用していない//私は[-Wunused-が、-がセット変数]しまった「prev_offset」の警告は、prev_offset = offset;cout << prev_offset;を追加することを除いて、それを解決するための任意のより良い方法はありますか?どんな答えもありがたいです。事前に感謝します。警告:変数のセットが、

+0

どのようなprev_offsetのデータ型ですか?最初の行を見ると、初期化されていませんが、ここで使用しています:assert(offset> prev_offset); – Asesh

+4

ただそれを取り外してください。 'assert'を読んでください。 – juanchopanza

+3

[使用されていない変数についての警告を最優先するにはどうすればよいですか?](https://stackoverflow.com/questions/1486904/how-do-i-best-silence-a-warning-about-unused-variables) – jpo38

答えて

0

これに対処するには、いくつかの方法があります。 1つは、変数を(void)にキャストするダミー文を入れることです。

(void) prev_offset; // this should stop the warning. 

assert()は条件付き NDEBUGマクロが設定されているか否かに基づいてチェックを含む方法と同様に変数を含む条件付きです。

// When you use ASSERT_CODE() the code only appears in debug builds 
// the same as the assert() checks. That code is removed in 
// release builds. 

#ifndef NDEBUG 
#define ASSERT_CODE(code) code 
#else 
#define ASSERT_CODE(code) 
#endif 

// ... 


T offset = ps->first; 
ASSERT_CODE(T prev_offset); // give it its own line 
bool first = true; 

while (1) { 
    if (first) 
    first = false; 
    else 
    assert(offset > prev_offset); 
    pl = l.find_inc(offset); 

    ASSERT_CODE(prev_offset = offset); 

    if (pl == l.m.end()) 
    break; 
    while (ps != s.m.end() && ps->first + ps->second <= pl->first) 
    ++ps; 
    if (ps == s.m.end()) 
    break; 
    offset = pl->first + pl->second; 
    if (offset <= ps->first) { 
    offset = ps->first; 
    continue; 
    } 
}