Страницы

Поиск по вопросам

понедельник, 25 февраля 2019 г.

Как сделать, чтобы программа компилировалась всеми популярными компиляторами?

Хочу устроить небольшой эксперимент, целью которого будет выяснение вопроса о необходимости избавляться от ветвлений в таких функциях как min, max, sign и abs. Каждый должен иметь возможность взять вот этот cpp файл (GitHub), скомпилировать, запустить и посмотреть на вывод в stdout. Программа выдает две колонки чисел: время работы функции с ветвлением и без него. Программа может работать долго, несколько минут (не пугайтесь, она не виснет).
Сейчас программа компилируется только в VС++ 2015 и в GCC 4.8.1 (из MinGW), а мне бы хотелось, чтобы она работала и в других компиляторах. Кто что может посоветовать сделать? От std::chrono мне не избавиться, время замерять нужно как-то более менее универсально, от int32_t тоже, так как я не знаю, вдруг у кого-то будет int размером 64 бита (мало ли). Возможно, я не во всём следую Стандарту или есть ещё какие-то ошибки?
Важно вот что: я отдаю себе отчёт, что код зависит от наличия знакового сдвига и дополнительного кода в представлении отрицательных чисел. Так и было задумано


Ответ

Приведённый код компилируется «только в VС++ 2015 и в GCC 4.8.1», так как использует возможности стандарта C++11 (а именно std::chrono и заголовочный файл cstdint). Для того, чтобы программа собиралась на компиляторах, поддерживающих исключительно более ранние стандарты, необходимо:
Использовать функциюclock из заголовочного файла ctime. Эта функция возвращает время в процессорных тактах, а потому идеально подходит для решения поставленной задачи. Заменить включение на . Оба заголовка имеют практически идентичное содержимое, однако последний был введён ещё в C99.

Комментариев нет:

Отправить комментарий