При использовании 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
Первый делает производить вывод в виде сборки, так как это то, что -S
делает; затем вы выбрасываете вывод. (Предполагая, что это то, что пишет "nul"
значит на вашей платформе; Я бы ожидал, что это записать в файл с именем "nul"
.)
Результат аналогичен второму, но выполняет больше работы (компиляция и генерация сборки) и на самом деле не выражает намерение проверить синтаксис. Дополнительный статический анализ во время генерации и оптимизации кода может генерировать дополнительные предупреждения, которые будут пропущены при проверке только синтаксиса.