adressmoeistranici
@adressmoeistranici
Делатель

Почему этот код работает?

Помогите разобраться пожалуйста.
Если С++ использует С89, где требуется располагать все переменные в начале оператора блока, то почему мой код работает, если я сделал совершенно не так...
Я отмечаю в конфигурации что все файлы являются написанными на СИ, а стандарт языка СИ установлено "устаревший MSVC".
Может я не делаю еще что то, чтобы результат был скомпилирован как СИ программа?
  • Вопрос задан
  • 211 просмотров
Решения вопроса 1
@res2001
Developer, ex-admin
Код то где?

На сколько я знаю, микрософтовский компилятор официально не поддерживает стандартов Си. Так что на самом деле, собирая Сишный код на msvc вы используете некий "микрософт Си" диалект языка.
Так что не удивляйтесь подобным вещам.
Некоторые фичи из более современных стандартов Си (С99, С11) в компилятор микрософт до сих пор не завезли или завезли, но в каком-то видоизмененном виде.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@antares4045
В языках этого семейства есть два мира: то что вы напечатали обрабатывается статическим анализатором, который выдаёт вам пачку рекомендаций, и если по его мнению, вы написали что-то "не то" дезактивирует вам кнопку запуска/компиляции. А потом ваш код с парой настроечных флагов попадает в компилятор, который вообще другая программа и ему абсолютно плевать на каком вы языке писали свою программу и какие настройки были в вашей среде -- он знает один язык и пытается всё подогнать под него. Причём, учитывая отсутствие единого стандарта gcc, mingw и msvc якобы одного года могут себя вести с одним и тем же кодом совсем по разному.

И да. Есть ещё оптимизация на уровне компилятора флаг -O3 заставит компилятор чуть ли не с нуля написать программу, которая ведёт себя точно как ваша, но при этом написана она будет по всем канонам высокопроизводительного кода. И ваша среда какую-нибудь оптимизацию (не о3 конечно, но о1-о2 наверняка) от компилятора требует.

Так что да получившийся exe файл, к написанному вами текстовому файлу с расширением "c", имеет весьма косвенное отношение.

В вижуал студии не работал. По всей видимости флажок "устаревший MSVC" это скорее ваше обещание себе использовать старый компилятор, а сама среда не особо следит.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы