Конфигурация компилятора: Расширения компилятора

В рамках данного занятия мы обсудим суть расширений компилятора, их практическую ценность и способы их деактивации.
Расширения компилятора
Правила поведения программ в языке C++ определены стандартом, и в большинстве случаев компиляторы следуют этим правилам. Однако многие компиляторы вносят свои собственные изменения в язык программирования, часто с целью улучшения совместимости с другими версиями языка (например, C99) или по историческим причинам. Такие специфичные для компилятора варианты поведения называются расширениями компилятора.
При использовании расширений компилятора возникает возможность создавать программы, которые не соответствуют стандарту языка C++. Программы, использующие нестандартные расширения, обычно не могут быть скомпилированы другими компиляторами (которые не поддерживают эти расширения), или могут работать некорректно.
К сожалению, часто случается, что расширения компилятора включены по умолчанию. Это особенно негативно сказывается на тех, кто только начинает изучать программирование, так как они могут ошибочно принять специфическое поведение, вызванное расширениями компилятора, за часть официального стандарта языка C++ (в то время как на самом деле это не так).
Использование расширений компилятора необходимо минимизировать, так как они редко необходимы для решения основных задач и могут привести к тому, что ваш код не будет соответствовать стандарту языка C++. Поэтому рекомендуется отключать расширения компилятора.
Совет: Отключите расширения компилятора, чтобы ваши программы оставались совместимыми со стандартами языка C++ и работали в любой системе.
Примечание: Настройки, приведенные ниже, применяются для каждого проекта отдельно. Вам нужно будет это всё проделывать при создании нового проекта, либо создать шаблон с этими настройками и уже по этому шаблону создавать новые проекты.
Отключение расширений компилятора
Пользователям Visual Studio
Для отключения расширений компилятора в Visual Studio следует выполнить следующие действия: кликнуть правой кнопкой мыши по названию вашего проекта в меню "Обозреватель решений" и выбрать пункт "Свойства".

Перед началом работы в диалоговом окне проекта убедитесь, что в разделе "Конфигурация" выбрано значение "Все конфигурации". Перейдите на вкладку "C/C++" > "Язык" и в разделе "Отключить расширения языка" установите значение "Да (/Za)":

После этого следует нажать кнопку "Применить" и затем "ОК".
Пользователям Code::Blocks
Вы можете отключить расширения компилятора, перейдя в раздел "Настройки" > "Компилятор".
После этого перейдите на вкладку "Compiler Flags" и отметьте опцию "Treat as errors the warnings demanded by strict ISO C and ISO C++ [-pedantic-errors]", затем нажмите кнопку "OK":

Пользователям GCC/G++
Для того чтобы исключить ошибки компилятора, вам следует включить флаг -pedantic-errors в строку команды компиляции.
Comments