Что нового в GCC 6?
Опубликовано 26.2.2016 13:12 пользователем Peter Lemenkov
С появлением GCC 6 в Fedora 24 у мэйнтейнеров и простых пользователей Fedora возник вопрос - а что там такого нового, что ничего не работает? Нового много!
Если же вам скучно читать список изменений, и подсказку по сборке ПО с новым GCC, то наши коллеги уже пару недель объясняют более доходчиво. Например, статья от Mark J. Wielaard, статья от Jeff Law, и статья от Richard Henderson.
Мы отметим следующие новшества:
Твой ход, LLVM!
Кстати, а вы уже ознакомились с рекомендациями для современных C-программистов?
Если же вам скучно читать список изменений, и подсказку по сборке ПО с новым GCC, то наши коллеги уже пару недель объясняют более доходчиво. Например, статья от Mark J. Wielaard, статья от Jeff Law, и статья от Richard Henderson.
Мы отметим следующие новшества:
- Переход на c++14 по умолчанию (предыдущие версии можно переключиться с помощью флагов компилятора).
- Scalar Storage Order. Это способ указать byte-order при описании структуры, и при дальнейшем обращении с ней компилятор будет автоматически добавлять код для конвертации endianness. Порой может быть удобно, но специфично для конкретного компилятора. С битовыми полями, к сожалению, применять не получится.
- Предупреждения о misleading identation в коде.
- Предупреждения, когда объект сравнивается с собой же. Например, if (point.x < 0 || point.x < 0)... или while (res > res)... - тут, вероятно, опечатка, и теперь компилятор укажет на это. Тоже самое, если в If..Else..If блоках будут повторяющиеся условия, то компилятор укажет на них.
- Компилятор теперь проверяет корректность операций побитового сдвига. По умолчанию предупреждает о сдвиговых операциях над отрицательными числами, и о слишком больших сдвигах (выходящих за пределы размера переменной, например, сдвиг на 30 байт 32-битного числа 10 потребует как минимум 35 битов). Можно включить и предупреждение о сдвигах за пределы знаковых переменных.
- Дополнительная проверка на разыменование нулевого указателя.
- Offloading.
Твой ход, LLVM!
Кстати, а вы уже ознакомились с рекомендациями для современных C-программистов?