Когда я компилирую следующий фрагмент кода с включенной оптимизацией
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;
}
Как я могу скомпилировать его, не отключая предупреждения, оптимизацию и никакой ненужный код?
Поскольку вы не используете эту переменную, кроме как в этом случае, почему бы просто не сделать:
NS_LOG_INFO("------RECEIVED: " << message.GetSize()
<< " Bitrate = " << (8 * m_totBytes / (Simulator::Now() - m_startTime).GetSeconds())
<< " instBit = " << instBitrate
<< " normBit = " << normBitrate);
Других решений пока нет …