В языках этого семейства есть два мира: то что вы напечатали обрабатывается статическим анализатором, который выдаёт вам пачку рекомендаций, и если по его мнению, вы написали что-то "не то" дезактивирует вам кнопку запуска/компиляции. А потом ваш код с парой настроечных флагов попадает в компилятор, который вообще другая программа и ему абсолютно плевать на каком вы языке писали свою программу и какие настройки были в вашей среде -- он знает один язык и пытается всё подогнать под него. Причём, учитывая отсутствие единого стандарта gcc, mingw и msvc якобы одного года могут себя вести с одним и тем же кодом совсем по разному.
И да. Есть ещё оптимизация на уровне компилятора флаг -O3 заставит компилятор чуть ли не с нуля написать программу, которая ведёт себя точно как ваша, но при этом написана она будет по всем канонам высокопроизводительного кода. И ваша среда какую-нибудь оптимизацию (не о3 конечно, но о1-о2 наверняка) от компилятора требует.
Так что да получившийся exe файл, к написанному вами текстовому файлу с расширением "c", имеет весьма косвенное отношение.
В вижуал студии не работал. По всей видимости флажок "устаревший MSVC" это скорее ваше обещание себе использовать старый компилятор, а сама среда не особо следит.