Семантические ошибки - PullRequest
6 голосов
/ 12 мая 2010

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

Насколько я знаю, семантические ошибки - это те ошибки, которые возникают в результате выражений с участием операторов с неправильным числом / типом операндов.

Например:

n3=n1*n2;//n1 is integer, n2 is a string, n3 is an integer

Вышеприведенное утверждение семантически неверно.

Но, читая «С Primer Plus» Стивена Прата, я нашел следующее утверждение

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

Если не компилятор, кто обнаружит эти ошибки?

Я что-то упустил?

Ответы [ 11 ]

0 голосов
/ 12 мая 2010

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

Семантическая ошибка - это ошибка, которая возникает, когда ваша программа компилируется, но не выполняет то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...