Является ли Visual C++ таким же мощным, как gcc?

мое определение мощного-это способность настраивать.

Я знаком с gcc Я хотел попробовать MSVC. Итак, я искал эквивалентные параметры gcc в msvc. Я не могу найти многих из них.

контроль результатов

Stop after the preprocessing stage; do not run the compiler proper.
gcc: -E
msvc: ???

Stop after the stage of compilation proper; do not assemble.
gcc: -S
msvc: ???

Compile or assemble the source files, but do not link.
gcc: -c
msvc:/c

полезно для отладки

Print (on standard error output) the commands executed to run the stages of compilation.
gcc: -v
msvc: ???

Store the usual “temporary” intermediate files permanently;
gcc: -save-temps
msvc: ???
  1. есть ли какое-то руководство по сопоставлению параметров компилятора GCC msvc?
  2. опция gcc Резюме списки больше вариантов в каждом разделе, чем параметры компилятора, перечисленные по категориям. В msvc отсутствует чертовски много важных и интересных вещей. Я что-то упускаю или msvc действительно менее мощный, чем gcc.

3 ответов


MSVC-это IDE, gcc-это просто компилятор. CL (компилятор MSVC) может выполнить большинство шагов, которые вы описываете с точки зрения gcc. CL /? дает помочь.

Э. Г.

предварительный процесс для stdout:

CL /E

компилировать без ссылки:

CL /c

Generate assembly (в отличие от gcc, однако, это не предотвращает компиляцию):

CL /Fa

CL на самом деле это просто компилятор, если вы хотите увидеть, какие команды IDE генерирует для компиляции и связывания самое простое, чтобы посмотреть раздел командной строки страниц свойств для элемента в IDE. CL не вызывает отдельный препроцессор или ассемблер, поэтому нет отдельных команд для просмотра.

на -save-temps, IDE выполняет отдельную компиляцию и связывание, поэтому объектные файлы сохраняются в любом случае. Для сохранения выхода предварительного процессора и выхода ассемблера вы можете включить /P и /Fa через ИНТЕГРИРОВАННАЯ СРЕДА РАЗРАБОТКИ.

gcc и CL разные, но я бы не сказал, что MSVC не хватает "чертовски много" вещей, конечно, не выходы, которые вы ищете.


для эквивалента-E, cl.exe-файла / P (он не "останавливается после этапа предварительной обработки", но выводит вывод препроцессора в файл, что в значительной степени одно и то же).

для-S, это немного мрачнее, так как шаги" компиляция "и" сборка " происходят в нескольких местах в зависимости от того, что другое параметры, которые вы указали (например, если у вас включена оптимизация всей программы, то машинный код не генерируется до ссылки этап.)

для-v Visual C++ не совпадает с GCC. Он выполняет все этапы компиляции непосредственно в сл.exe (и ссылка.exe), поэтому нет" выполненных команд " для отображения. Аналогично для-save-temps: потому что все происходит внутри cl.exe и ссылка.exe напрямую, единственными "временными" файлами являются .obj файлы, которые cl.exe производит, и они всегда сохраняются в любом случае.

в конце концов, GCC является проектом с открытым исходным кодом. Это означает, что любой, у кого есть желание scratch может добавлять любые параметры командной строки, которые им нравятся, с относительно небольшим сопротивлением. Для Visual C++, коммерческого продукта с закрытым исходным кодом, каждый вариант должен иметь бизнес-кейс, совещания по дизайну, планы тестирования и так далее. каждая новая функция начинается с минус 100 очков.


оба компилятора имеют множество опций для изменения... всё. Я подозреваю, что любой вариант не присутствует в любой вариант, то не стоит делать в первую очередь. Большинство "нормальных" пользователей все равно не используют большинство этих опций.

Если вы смотрите исключительно на количество доступных опций в качестве меры "мощности" или "гибкости", то вы, вероятно, найдете gcc победителем, просто потому, что gcc обрабатывает многие платформы, отличные от Windows, и имеет конкретные параметры для многих из этих платформ, которые вы, очевидно, не найдете в MSVC. gcc (ну, GCC toolchain) также компилирует множество языков за пределами C и c++; я недавно использовал его для Objective-C, например.

EDIT: я с Дином сомневаюсь в обоснованности вашего вопроса. Да, MSVC (cl) имеет опции для эквивалента многих опций gcc, но нет, количество опций на самом деле не означает многого.

короче говоря: если вы не делаете что-то очень специальный, вы найдете MSVC легко "достаточно мощный" на платформе Windows, что вы, вероятно, не будет отсутствовать каких-либо параметров gcc.