2016-11-11 2 views
12

В чем разница между «синтаксической ошибкой» и «ошибкой компилятора», как это видит Visual Studio? Или, по-другому, почему некоторые ошибки «времени компиляции» подчеркнуты красным волнистыми линиями, а некоторые с синими волнистыми линиями? Вот пример:Ошибка синтаксиса в сравнении с ошибкой компилятора в Visual Studio или красная волнистая подчеркивание против синего волнистого подчеркивания

enter image description here

красная подчеркнуты ошибка выше имеет такое описание:

No overload for method 'ValidateFilteredRecipient' takes 6 arguments

Синий подчеркнутый ошибка это описание:

'ValidateBuild': cannot declare instance members in a static class

Это не для меня ясно, каковы отличительные характеристики двух ошибок.

Я думал, что найти ответ будет кусок пирога: я бы просто сказал ему, и первым результатом будет страница MSDN, полностью излагающая эту тему; однако, очень удивительно, это было не так. Я начал, пытаясь Google цвета (так как я еще не знаю, красный означает «ошибка синтаксиса» и синий означает «ошибка компилятора»):

visual studio red underline vs. blue underline

Нет помощи там. Тогда я попробовал эти поиски:

visual studio error underline color meanings
visual studio underline color meanings

я мог видеть, что это не идет в никуда, так что я гугле немного больше и понял, где цвета были установлены в VS: Tools> Options> Окружающая среда> Шрифты и цвета. Кстати, невозможность поиска огромного списка здесь крайне раздражает, но я понял, что «синтаксические ошибки» имеют красную волнистую подчеркивание, а «ошибки компилятора» имеют синюю волнистую подчеркивание.

enter image description here

Так что же означают эти? Вернуться к Google:

visual studio compiler error vs. syntax error

Ничего актуальна. Вот ближе, я нашел, из MSDN:

Fonts and Colors, Environment, Options Dialog Box

Эта страница содержит следующие данные:

Compiler Error -- Blue squiggles in the editor indicating a compiler error.

и

Syntax Error -- Parse errors.

Не совсем полезно - акцент на " вообще".Я всегда думал, что я знал, что такое «ошибка синтаксиса» был, по крайней мере, и Wikipedia соглашается:

a syntax error is an error in the syntax of a sequence of characters or tokens that is intended to be written in a particular programming language.

Кроме того, here is what what it has for syntax:

the syntax of a computer language is the set of rules that defines the combinations of symbols that are considered to be a correctly structured document or fragment in that language.

Итак, возвращаясь к моему «ошибка синтаксиса» от выше:

No overload for method 'ValidateFilteredRecipient' takes 6 arguments

Как это синтаксическая ошибка в определении, которое я здесь включил? На самом деле, на мой взгляд, «ошибка компилятора» я получил более-близко соответствует это определение синтаксической ошибки:

'ValidateBuild': cannot declare instance members in a static class

Может кто-то пожалуйста, помогите мне понять это?

+0

@AlfieGoodacre - "то, что вы не можете сделать, или компилятор не позволит вам" <--- a.k.a. "что-то, что вы сделали неправильно". –

+0

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

+0

@JeroenMostert - я полностью понимаю. Но разве это не ошибка? Я имею в виду, что это коммерческая IDE на уровне предприятия .... Ради решения головоломки, по крайней мере ... почему они не только один тип ошибки? И почему они не документированы? –

ответ

1

Ключевое различие между синтаксической ошибкой и ошибкой компиляции - это когда Visual Studio ее обнаруживает.

Синтаксическая ошибка обнаруживается и подсвечивается при кодировании. Вам не нужно создавать код для получения этих ошибок.

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

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

Что касается выделения их по-разному, я думаю, что это визуальное представление для Разработчика, чтобы понять, что он мог поймать при написании кода.

Как уже упоминалось всеми, в конце дня вам необходимо исправить оба действия, чтобы выполнить код.

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

3

И синтаксис, и ошибки компилятора будут препятствовать компиляции кода.

Синтаксис Ошибки ссылаются на то, как ваш код взаимодействует с другими фрагментами кода. Такие вещи, как несоответствие типов при передаче параметров функциям и т. Д.

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

+0

«Это противоречит ** определению языка **». Разве это не синтаксис языка? –

+0

Я думаю, что должно быть различие между этими двумя типами ошибок - вы называете это синтаксической ошибкой или что-то еще семантикой. IMO Синтаксическая ошибка - это просто другая категория ошибки компилятора. – Theo

+0

Я согласен с вами там, определенно. Я просто смущен тем, как MS потрудилась отличить эти два в первую очередь, а затем бросила мяч на реализацию. –