Разница между остановкой после компиляции и проверкой только синтаксиса

При использовании gcc или g ++, в чем разница между указанием GCC компилировать только файл, а не ссылку (-S), в сочетании с указанием не создавать выходной файл (-o «nul»):

gcc.exe/g++.exe -S "filename" -o "nul"

… и сказать, чтобы он проверял только синтаксис (-fsyntax-only)?

gcc.exe/g++.exe -c "filename" -fsyntax-only

Оба варианта не производят вывод, только запускают этап компиляции и занимают примерно одинаковое количество времени для запуска.

Я использую порты GCC для Windows, которые рассматривают «nul» как нулевое устройство, которое использует весь вывод (например, / dev / null).

Редактировать: как указал Майк Сеймур, при передаче -fsyntax-only в GCC, он не будет пытаться выполнить оптимизацию, даже если это будет сказано, что не относится к -S. Другими словами, это медленнее (я выполнил измерения):

gcc.exe -S "filename" -o "nul" -O3

… чем это:

gcc.exe -c "filename" -fsyntax-only -O3

2

Решение

Первый делает производить вывод в виде сборки, так как это то, что -S делает; затем вы выбрасываете вывод. (Предполагая, что это то, что пишет "nul" значит на вашей платформе; Я бы ожидал, что это записать в файл с именем "nul".)

Результат аналогичен второму, но выполняет больше работы (компиляция и генерация сборки) и на самом деле не выражает намерение проверить синтаксис. Дополнительный статический анализ во время генерации и оптимизации кода может генерировать дополнительные предупреждения, которые будут пропущены при проверке только синтаксиса.

5

Другие решения


По вопросам рекламы [email protected]