0

最適化を有効にして次のコードをコンパイルすると

double bitrate = 8 * m_totBytes / (Simulator::Now() - m_startTime).GetSeconds();
double instBitrate = 8 * message.GetSize() / (Simulator::Now() - m_lastRecv).GetSeconds();
normBitrate = 0.1 * instBitrate + 0.9 * m_resolution;

NS_LOG_INFO("------RECEIVED: " << message.GetSize()
         << " Bitrate = " << bitrate
         << " instBit = " << instBitrate
         << " normBit = " << normBitrate);

次のようなコンパイラ警告が表示されます。

error: unused variable ‘bitrate’ [-Werror=unused-variable]

NS_LOG_INFOマクロはコンパイラによって最適化されるためです。コンパイルするには、次のような無駄で醜いコードを追加する必要があります。

if (false) { // For suppressing "Unused variable" warning when compiling with "-d optimiized"
    std::cout << bitrate << instBitrate << normBitrate << std::endl;
}

警告、最適化、およびジャンクコードを無効にせずにコンパイルするにはどうすればよいですか?

4

1 に答える 1

3

そのインスタンス以外ではその変数を使用していないので、次のようにしてください。

NS_LOG_INFO("------RECEIVED: " << message.GetSize()
     << " Bitrate = " << (8 * m_totBytes / (Simulator::Now() - m_startTime).GetSeconds())
     << " instBit = " << instBitrate
     << " normBit = " << normBitrate);
于 2013-12-10T16:55:12.067 に答える