оптимизация конст. переменных, циклов
От: prog123 Европа  
Дата: 22.03.17 20:33
Оценка: :)
Столкнулся с интересной фичей/багом. В следующем примере кода цикл не выполняется из-за того, что случайно объявил переменную константной.
windows, mingw, gcc 4.9.2

#include <iostream>
#include <cassert>

// замена реальной ф-ции для примера,только для целых
int readRawData(char* buffer, size_t size)
{
    assert(size == 4);
    *((int*)buffer) = 10;
    return 4;
}

int main(int argc, char *argv[])
{
    int const blockCount = 0;  // если const, то цикл ниже не выполняется. если убрать const, все норм

    //stream.readRawData((char*)&blockCount, sizeof(blockCount))  // реальная ф-ция
    readRawData((char*)&blockCount, sizeof(blockCount));          // замена для примера

    for(int i = 0; i < blockCount; ++i)                  // в отладчике blockCount = 10, но цикл не выполняется, он выкинут при компиляции
        std::cout << i << " ";                      // здесь должно печататься 0 1 2 3 ... 9 но не печатается ))
    std::cout << std::endl;

    return 0;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.