Что нового в GCC 6?

С появлением GCC 6 в Fedora 24 у мэйнтейнеров и простых пользователей Fedora возник вопрос - а что там такого нового, что ничего не работает? Нового много!

Если же вам скучно читать список изменений, и подсказку по сборке ПО с новым 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-программистов?