Насколько важно соблюдение стандартов?

Для такого языка, как C ++, наличие стандарта является обязательным. И хорошие компиляторы стараются изо всех сил (ну, по крайней мере, большинство хороших компиляторов) соответствовать. Многие компиляторы имеют расширения языка, некоторые из которых разрешены стандартом, а некоторые нет. Из последнего вида 2 примера:

  1. gcc ' s typeof

  2. Компиляторы Microsoft позволяют объявлению чистой виртуальной функции иметь как спецификатор чистой (= 0), так и определение (что запрещено стандартом - не будем обсуждать почему, это другая тема :)

(там много других примеров)

Оба примера полезны в следующем смысле: example1 - очень полезная функция, которая будет доступна в c ++ 0x под другим именем. Пример2 также полезен, и Microsoft решила не соблюдать бессмысленный запрет.

И я благодарен за то, что компиляторы предоставляют расширения языка, которые помогают нам, разработчикам, в нашей повседневной работе. Но вот вопрос: не должна ли быть опция, которая, если она установлена, требует, чтобы компилятор был настолько совместим со стандартами, насколько это возможно, независимо от того, согласны они со стандартом или нет. Например, у Visual Studio есть такая опция, что называется отключением языковых расширений. Но послушайте, они по-прежнему разрешают пример 2.

Я хочу, чтобы все правильно поняли мой вопрос. Это ОТЛИЧНО, что MSVC позволяет example2, и я бы очень хотел, чтобы эта функция была в стандарте. Он не нарушает ни одного совместимого кода, не делает ничего плохого. Это просто нестандартно.

Хотите, чтобы Microsoft отключила example2, если для параметра «Отключить языковые расширения» задано значение true? Обратите внимание, что слова microsoft, example2 и т. Д. Являются заполнителями :)

Хотите, чтобы Microsoft отключила example2, если для параметра «Отключить языковые расширения» задано значение true? Обратите внимание, что слова microsoft, example2 и т. Д. Являются заполнителями :)

Хотите, чтобы Microsoft отключила example2, если для параметра «Отключить языковые расширения» задано значение true? Обратите внимание, что слова microsoft, example2 и т. Д. Являются заполнителями :) Почему?

Опять же, на всякий случай. Ключевой момент: если компилятор позаботится о предоставлении совместимой версии (необязательно установленной в настройках) (в ее пределах, например, я не говорю об экспорте) для определенной функции, когда они предоставляют лучшую альтернативу, которая не является стандартной и является возможно, даже надмножество стандарта, таким образом, ничего не нарушая.

10
задан Lightness Races with Monica 1 May 2013 в 09:27
поделиться