Вы читаете ошибки компиляции C или C ++ после первой?


19

Я никогда не понимал, почему компиляторы C и C ++ пытаются восстановиться после ошибок и продолжают анализ. Почти всегда первая ошибка генерирует поток фиктивных ошибок, которые исчезнут, как только будет исправлена ​​первая. После нескольких лет опыта я просто перестал искать любую ошибку, кроме первой в каждом файле. Я перезапускаю компилятор, а затем делаю это снова, пока не останется больше ошибок. Это обычная практика?


Я думаю, что я только прочитал первые, но я не работаю с тысячами миллионов исходных файловых решений, так что это помогает.
Кодер

Ответы:


19

Иногда ошибки не связаны. Я считаю , что проще взглянуть на список ошибок и устранить причину серии родственных ошибок, а затем зафиксировать следующий ип о связанной ошибке. Если проект большой и требует много времени для сборки, я считаю, что работать таким образом не так сложно, как исправить первую ошибку, перекомпилировать, повторить ...


3
+1: имейте в виду, если проект большой и требует времени для сборки, разумно не слишком сильно менять между компиляциями, чтобы вы могли относительно легко найти любые проблемы, которые вы представили.
Donal Fellows

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

8

Это зависит от времени компиляции . Например, если я знаю, что я только что изменил главный заголовок, который вызовет перестройку всего проекта, я, безусловно, более подробно рассмотрю остальную часть стека ошибок и посмотрю, смогу ли я исправить некоторые из них. Это дает мне лучшее чувство, когда я встаю, чтобы приготовить кофе, пока работает компилятор.


4

Да, я делаю то же самое, если только я не использую компилятор, чтобы помочь мне в рефакторинге, и в этом случае мне нравится полный список ошибок :)


Многие современные IDE имеют инструменты рефакторинга, доступные по нажатию кнопки, поэтому refactor-by-compiler-error не требуется, если у вас есть доступ и возможности с такими инструментами. Если вы не предпочитаете это ...
FrustratedWithFormsDesigner

1
Да, но у моей основной работы IDE VS нет C ++ :( Когда нет инструмента, я найду способ!
Стивен Бэйли

1
Visual Assist X от Whole Tomato добавляет рефакторинг в VS для C ++.
каменный металл

4

Если в номерах строк есть пробел, компилятор, вероятно , восстановился, а затем обнаружил другую ошибку.

Обычно только пытаются исправить одну ошибку в каждой связке.


1

Лучшие компиляторы будут давать лучшие результаты и давать вам больше полезных ошибок после первой, часто посредством некоторого автоматического исправления ошибок, так что предположительно хороший код можно хотя бы проверить. Но затем я привык работать в Java, в Eclipse, где опечатки синтаксиса мгновенно обнаруживаются и легко исправляются, а другие ошибки компилятора имеют тенденцию быть более разнообразными и легче компилятору восстанавливаться. Я могу только предположить, что это похоже на работу в Microsoft IDE и других в C ++ или C #.


0

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


0

Я делаю это (чтобы прочитать ошибки после первой), только если компиляция 1 cpp очень длинная. Или не доступно. Затем я предпочитаю убедиться, что я исправил все, что мог идентифицировать в ошибках компилятора, как не относящиеся к первой ошибке.

Когда ваш файл cpp может быть скомпилирован отдельно и выполняется менее чем за секунду (или у вас есть «intellisense», указывающие на ошибки до того, как компиляция даже началась), вам не нужно делать это большую часть времени.

В настоящее время я работаю над проектом, в котором я не могу скомпилировать только один cpp (и у меня нет руки в системе сборки, поэтому я не могу изменить это O__o), и для некоторых файлов cpp может потребоваться более десяти минут для компиляции ( даже после долгих усилий по его уменьшению мы сократили его до 50% от первоначального времени компиляции ...).

В этом типе очень длительной настройки компиляции вы, как правило, сначала много думаете, прежде чем нажимать «build» ... и даже потом много думаете, чтобы, возможно, найти ошибки перед компилятором, поскольку вы, безусловно, быстрее получаете их мысленно, чем это. ,


-1

Это довольно распространенно делать, как вы. Я обычно говорю стажерам или начинающим программистам, пораженным количеством ошибок, игнорировать почти все ошибки, кроме первой. Скорее всего, это настоящая ошибка, которую нужно исправить, а не вводящая в заблуждение фантомная ошибка, вызванная предыдущей. По этой причине некоторые (большинство?) Компиляторы имеют возможность остановить компиляцию после первой ошибки. Системы сборки обычно можно настроить так, чтобы они останавливались после первого файла, в котором также есть ошибки.

Однако есть причины продолжать компиляцию и после обнаружения ошибок. Например, вы можете подсчитать, сколько файлов имеют ошибки, или посмотреть, вызывает ли включенный заголовочный файл ошибки в нескольких файлах.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.