Лексико-семантические ошибки возникают
от неточного знания значения слова, а
иногда и от совершенно ложного
знания и изредка от невнимательности.
Обычно такие ошибки допускаются в словах
из периферийной зоны словарного запаса
человека.
Общее количество слов в русском языке
никем не подсчитано. Наверное, оно близко
к миллиону. В новом Академическом словаре
русского литературного языка будет
около 200 тысяч слов. А. Пушкин за годы
своего творчества употребил 21200
слов. А. Блоку для написания цикла «Стихов
о Прекрасной Даме» понадобилось 2500
слов. Сколько слов в вашем словаре?
Имеется в виду активный запас слов –
слова, которые вы употребляете. По
некоторым оценкам лингвистов словарь
человека с высшим образованием имеет
объем порядка 10 тысяч слов. Это
количественная сторона словаря. Теперь
качественная.
Значения почти всех слов, которые мы
знаем, находятся в зоне подсознания.
Любая попытка дать рациональное
определение тому или иному слову,
превращается в непосильную задачу. Не
верите? Тогда определите простое слово
«стол», переведите его значение, которым
вы пользуетесь без всяких затруднений,
в сферу сознания. Попробовали? Получается
что-то длинное и смешное. Теперь посмотрите
в толковый словарь, прочитайте статью
на это слово. У него, оказывается, не
одно, а шесть значений. А вы, пользуясь
безошибочно словом, и не подозревали
об этом. А еще в словаре приводятся
фразеологизмы со словом «стол». А еще
есть и вообще другое, второе слово «стол»
– историзм со значением «престол».
Так что ошибиться в значении слова,
особенно нового, или старого, или
специального, или редкого не так уж и
трудно.
Остановимся сперва на механизмах
возникновения лексико-семантических
ошибок. Основных механизмов всего два:
ложная синонимия и ложная этимология.
Ложная синонимия:человек не знает
точного значения слова и приравнивает
его к значению другого слова, считая
его синонимом первого.
«Магазин быстро завоевал авторитетсреди населения». (Газета).
Авторитет– это влияние, а в контексте
речь идет о популярности, известности.
«Между нами есть особенности».
(Ю.Бондарев). Автор хотел сказать:различия, но употребил ложный
синоним.
Иногда ложные синонимы не совсем ложные.
Смешиваются частичные синонимы,
которые не во всех контекстах могут
заменить друг друга.
«Мы уже накопили незначительныйопыт в этом деле». (Газета). Надо:небольшой
опыт.«Небольшой» и «незначительный»
– частичные синонимы. Кроме того, смешаны
словосочетания «уже значительный» и
«еще незначительный».
«По-деловому суетятсячлены новогодней
комиссии». (Газета). Надо:торопятся.Суетиться – бестолково торопиться.
Особенно часто ложными или частичными
синонимами оказываются однокорневые
паронимы, поэтому смешение паронимов– самая распространенная причина
лексико-семантических ошибок[1[8]].
«Машина лейтенанта стала достигатьбеглецов». (Газета). Надо:настигать.
«Десятки солдат химического центра
были подверженывоздействию ЛСД.
Он вводился также морским пехотинцам».
(Газета). Надо:подвергнуты.
«Нетерпимыйхолод мучил нас всю
дорогу». (Газета). Надо:нестерпимый.
«Так появилось желание занововернуться в прошлое». (Газета). Надо:снова.
«Теоретический фундамент космических
полетов положентрудами
К.Э.Циолковского». (Газета). Надо:заложен.
«Комнату проветривать возможночаще». (Медицинская брошюра). Надо:как
можно, по возможности.
Существуют очень популярные пары слов,
которым посвящены десятки статей по
культуре речи и которые продолжают
выступать в роли ложных синонимов: стать
и встать, надеть и одеть, предоставить
и представить, обоснование и основаниеи т.д. Если вы их не различаете, наведите
справки в словарях.
Ложная или частичная синонимия могут
привести к контаминации словосочетаний.
«Предлагается в окружениисобора
запретить автомобильное движение.
(Газета). Надо:вокруг (в районе) собора.Но можно сказать:в окружении президента.Можно рассматривать эту ошибку и как
смешение паронимов.
«Завтра, как сообщают синоптики, состоитсяоблачная с прояснениями погода».
(Газета). Погодаожидается,асостоится
матч.
Ложная этимология(другое название
– народная этимология) – явление, по
сравнению с ложной синонимией, довольно
редкое.
Приведем два типичных примера.
Первый примербез искажения формы
слова:слово «заглавный»некоторые,
по ложной этимологии, производят от
слова «главный» и наделяют значением
«самый главный», «первый».
«Заглавнымшел жеребец Хиус».
(Газета). То есть –первым.
«Заглавнаяпрофессия». (Газетный
заголовок). То есть –самая главная.
В устной речи встречаются: заглавная
фигура, заглавный вопрос, заглавная
должность.
А между тем слово «заглавный» происходит
от слова «заглавие». Отсюда: заглавная
буква, заглавная тема в печати, заглавная
партия в опере, заглавная роль в пьесе
(роль персонажа, именем которого названа
пьеса). Поэтому в пьесе А.П. Чехова
«Вишневый сад» нет никакой заглавной
роли.
Второй пример с искажением формы слова.
Было когда-то русское слово «селянка»
– сельское кушанье. Потом оно
превратилось в «солянку» –соленое
кушанье, хотя оно не более соленое,
чем остальные. У Чехова мы найдем только
селянку, у Горького – оба слова, у
Фурманова (в «Чапаеве») – только солянку.
Вот время народной переделки слова.
Это была раскладка лексико-семантических
ошибок по причинам их возникновения.Но для литературного редактирования
этого мало. Есть еще одна важная сторона
ошибок – ихчастота.Выше по частотной
характеристике ошибки были разделенына индивидуальные, регулярные,
массовые.
Индивидуальные ошибкиимеют
субъективную основу и характеризуют
отдельного человека. Кто-то не различает
слов«коренной»и«закоренелый»и говорит: «Она закоренелая москвичка».
Для кого-то синонимичны«природный»и«прирожденный», и у него в тексте
можно встретить: «Он природный наставник
молодежи», третий пишет в газете:
«Большинство времени уделялось
профилактике». Вместо: большая часть
времени.
М. Горький допускал сочетание числительного
с собирательным существительным:
«полмиллиона молодежи, получающей
высшее образование», «больше тысячи
молодежи охвачены жаждой знания».
Р. Рождественский не различал слова
«боязно» и «боязливо»:
«Ты в окошко глянешь боязно».
Здесь нужно: боязливо, то есть робко, с
боязнью. Разница между словами не только
семантическая, но и синтаксическая:
боязно – только сказуемое (ей боязно);
боязливо – только наречие (она чувствует
себя боязливо).
В общем, у каждого свои недостатки.
Регулярные ошибкиимеют другое
качество. Их нельзя считать субъективными.
Если многие регулярно спотыкаются на
одном и том же месте, значит, там что-то
есть.«Заглавный вопрос», «надеть
очки», «представить слово»–
такие ошибки встречаются нередко.
Типичный пример регулярной ошибки в
переводе И. Кашкина романа Р. Стивенсона
«Владетель Баллантрэ»:
– К черту эти напыщенные речи! –
воскликнул милорд. – Вы прекрасно
знаете, что мне это ни к чему. Единственно,
чего я добиваюсь, это оградить себя от
клеветы, а дом мой – от вашего вторжения.
Нашли ошибку? Надо различать две
конструкции: «единственное (числительное),
чего я добиваюсь» и «единственно
(наречие) правильное решение». На этом
споткнулся очень квалифицированный
переводчик, а может быть, наборщик.
Регулярные ошибки требуют такого же
жесткого исправления, как и индивидуальные,
хотя и могут быть частично объяснены.
Разберем еще три характерных примера.
1.
Слово «миновать»означает
«проходить мимо, рядом». А на практике,
кроме словарного значения, встречается
и такое:
«Каждый день тысячи рабочих минуют
проходную каждого завода». (Районная
газета).
«Поднявшись по ступеням, Наполеон
миновал неширокую калитку в крепостной
стене и направился в город». (Популярная
статья на историческую тему).
Получается, что тысячи рабочих прогуливают
работу? Нет, конечно. Слово «миновать»
употреблено здесь в значении «проходить
через». И эту ошибку сделали два совершенно
разных автора. Значит есть какая-то
объективная причина для нее. Возможно,
это самое начало процесса, в результате
которого значение слова изменится –
расширится. А может, процесс заглохнет.
История покажет.
2.
Слово «обнародовать»означает
«объявить, опубликовать для всеобщего
сведения». А в газетах 1970–1980-х годов
встречалось такое словоупотребление:
«Так бы это и осталось неизвестным, если
бы журналист не обнародовал подвиг
героя».
«Лев Толстой впервые обнародовал слово
«непротивление». А Ленин «партийность».
Нельзя обнародовать событие или слово.
О событии можно рассказать, а слово
впервые употребить. Но здесь ситуация
совершенно не та, что в предыдущем
случае. Здесь перед нами метафорическое
употребление слова – не авторская
глухота, а авторская вольность. Переносное
значение – «показать, рассказать
народу». Метафора была популярна у
журналистов той эпохи, а потом умерла
вместе с эпохой. Прервался процесс
появления нового значения у слова.
3.
Слово «половина»означает «одна
вторая часть», «одна из двух равных
частей». Мы говорим: одна половина,
первая или вторая половина, обе половины.
Неверно: последняя половина. Курьезно:
большая или меньшая половина. Плеонастично:
две равные половины. Ошибки очень
прозрачные, но посмотрите, как настойчиво
встречается одна из них:
«Перед нами стоит сейчас вторая, большая
половина задачи, большая по трудности».
«Тем самым что мы сбросили власть
эксплуататоров, мы сделали уже большую
половину работы». (В.И. Ленин. Речь на
заседании пленума Моссовета, т. 31, с.
372, 373).
«Большая половина фабрики… была в
огне». (Б. Полевой, «Глубокий тыл»).
«Большая половина неба», «большая
половина загона», «большая половина
мужиков». (А. Ананьев, «Годы без войны»).
«Ожоги покрывали большую половину
тела». («Советская Россия», 1957 г.).
«Большая половина рабочих чертежей уже
готова». («Ленинградская правда». 1976
г.).
«Большая половина матча прошла в равной
борьбе». (Телевидение, 1985 г.).
Во все этих примерах слово «половина»
употреблено в значении «одна из двух
неравных частей». И тогда большая
половина – это большая часть. Но это
значение всегда останется ошибкой. Ибо
оно открыто алогично.
Регулярность может проявляться очень
слабо.М.С. Горбачев в телевизионном
интервью в 1996 году сказал такую фразу:
«Зюганов в теории блудит». Он хотел
сказать: блуждает. Перепутал паронимы.
Это индивидуальная ошибка? Нет. В одном
военном приказе 1942 года встретилось
такое же словоупотребление: «Части
дивизии блудили по лесу».Ошибка слабо
регулярная.Их авторы не знали, что
слово «блудить» стоит в ряду: блуд,
блудница, блядь и пр. Знали бы –
поостереглись бы.
Массовые ошибки– это ошибки,
получившие широкое, повсеместное
распространение, но не узаконенные
словарем.
Начнем с курьезной ошибки на идеологической
подкладке. Выше, в разделе «Фактические
ошибки», мы уже выяснили, что выстрел
«Авроры» не был сигналом к штурму
Зимнего дворца.Теперь займемся
лексико-семантическими манипуляциями,
связанными с этим событием. Вторая ложь
родилась где-то в 1960-х годах, когдавыстрел «Авроры» превратился в залп
«Авроры». Залп – это одновременный
выстрел нескольких орудий. Сочетание
«залп «Авроры» мог придумать только
малограмотный человек, но эта лексическая
и историческая ошибка получила массовое
распространение. Был даже снят
художественный кинофильм под названием
«Залп «Авроры». В газетах можно было
встретить расхожую фразу вроде:
«Легендарный крейсер «Аврора». Это его
залп возвестил о начале новой эпохи».
Видный поэт и публицист того времени
Николай Грибачев многократно выступал
на эту тему. Вот только одна его фраза
из журнальной статьи: «Однако будущий
Пимен, бесстрастный летописец лет
минувших, обязательно отметит, что в
заревах залпа «Авроры» родилась все
растущая волна необратимых перемен[2[9]].
Прочитайте еще раз внимательно. Почему
от одного залпа образовалось не одно
зарево, а много? Как в заревах может
родиться волна? В одном предложении
преувеличение, ломаная метафора и
фактическая ошибка. Это образчик
советского политического словоблудия.
Основой пропагандистского стиля той
эпохи была жажда экспрессии, ради ее
утоления приносили в жертву и точность
словоупотребления и даже историческую
правду.
Третья неправда, связанная с событиями
25 октября 1917 года, заключена в словосочетании
«штурм Зимнего».Что это за штурм,
в котором не было ни одного убитого?
Позднейшие инсценировки и художественные
фильмы, в которых солдаты и матросы
бегут из-под арки Главного штаба к
Зимнему дворцу, прямо на пулеметную
стрельбу юнкеров не имеет ничего общего
с исторической правдой[3[10]].
Не было жертв, а значит, не было и штурма.Был захват Зимнего дворца,то есть
разоружение и вытеснение его защитников
без кровопролития.
Некоторые нынешние публицисты настаивают
на том, что и революции не было – был
Октябрьский переворот. Сами большевики
в первые годы советской власти так
называли это событие. Но все-таки,
думается, что по своему историческому
значению это была революция – Октябрьская,
но не Великая. Величие оставим за
Отечественной войной 1941–1945 гг.
Массовой ошибкой является также
словосочетание «правительственная
награда».Никто эту ошибку не видит,
заметил рядовой читатель в 1987 году.
Приведем полностью его письмо-заметку:
Правильно называйте награды
Хочу обратить внимание журналистов на
распространенную ошибку – ее можно
встретить почти во всех газетах. Нередко
в печати советские ордена и медали –
как боевые, так и трудовые – называют
правительственными наградами.А
это неверно,Совет Министров СССР
орденами и медалями не награждает.
Советую работникам редакций, особенно
очеркистам и репортерам, внимательно
прочитать тот раздел Советской
Конституции, где говорится о деятельности
Президиума Верховного Совета СССР.
Каждому станет ясно, что в нашей
стране ордена и медали правильно
называются государственными, а не
правительственными наградами.
Красноярск. К. Кузнецов, ветеран войны
и труда[4[11]]
Конституция теперь другая, а награды
по-прежнему государственные,но и
ошибка по-прежнему встречается. Это
лексическая ошибка, ибо в ней – народное
представление о том, что правительство
– это и президент, и совет министров, и
парламент вместе взятые.
Еще одна ошибка из ряда курьезных. В
1970-е годы (а может быть, и раньше) пришло
в журналистику из науки и стало модным
слово «эпицентр».Журналисты поняли
его неправильно – как«самый центр»или просто«центр»,но с некоей
экспрессией, исходящей от начальной
части «эпи». Как научный термин«эпицентр»
означает проекцию центра (землетрясения,
воздушного взрыва) на поверхность Земли.Журналисты это необычное, красивое
слово стали употреблять метафорически.
Определите сами переносное значение
этого слова в примерах из разных газет:
«Париж оказался в то время эпицентром
массовых студенческих волнений,
охвативших многие страны».
«Девушка волей случая оказалась в
эпицентре происходящих событий».
«И в тот самый момент, когда взрыв
читательского возмущения неизбежен,
автор резко толкает героиню в эпицентр
взрыва».
«Сейчас мы подходим к «эпицентру»
проблемы».
Во всех этих случаях «эпицентр»
употреблено метафорически в значении
«самый центр». То есть в представлении
журналистов есть просто центр и эпицентр
– самый центр, центрее центра. Это
логически ущербная метафора, не имеющая
будущего. И с ней редакторы должны
бороться. Вы обратили внимание: в
последнем примере метафора закавычена,
сам автор ее забраковал: почувствовал
какое-то неудобство и огородил специальными
страховочными знаками.
Еще газетный пример: «Опергруппа
держалась в эпицентре района интенсивного
поиска». Здесь нет метафоры, автор не
знает значения красивого, эффектного
слова.
И даже без всякого эффекта в прямом
значении слово в журналистике употребляется
неправильно: «Эпицентр землетрясения
находился под дном Калифорнийского
залива». Под дном находился центр
землетрясения, а на дне залива – эпицентр.
Это ошибка не из районной газеты, а из
«Известий». Редакторам предстоит долгая
и трудная борьба с этим лексическим
уродцем.
До сих пор рассматривались массовые
ошибки, требующие обязательного
редактирования, причем редактирование
это бесспорно. Но есть и другие, более
сложные случаи массовых ошибок. Тогда
приходится обращаться не только к
толковым словарям, но и к словарям по
культуре речи, к словарям трудностей
русского языка.
Есть в русском языке старинное слово
«довлеть».В словарях оно снабжается
пометой «стар.». Его значение:быть
достаточным, удовлетворять.Особое
распространение получил оборот «довлеть
себе», отсюда книжное слово «самодовлеющий»
– значительный сам по себе, вполне
самостоятельный.
Глагол управлял дательным падежом:
– с дополнением: «Довлеет каждому доля
его» (пословица из словаря В. Даля),
– без дополнения: «Сколько не имей сил,
их не довлеет» (А. Герцен).
Заметьте: все примеры из XIX века. Новых
не найдете. Однако слово употребляется
в наше время – и нередко, но в другом
значении: господствовать, тяготеть над
чем-либо. В современных толковых словарях
значение или не указывается вовсе (в
4-томном) или указывается, но не
рекомендуется, то есть считается ошибкой
(в словаре Ожегова).
Из разных газет:
«Груз старых представлений довлеет над
ним».
«Пережитки феодализма довлели над
сознанием японского народа».
«Прошлое не должно постоянно довлеть
над нами».
«Над леспромхозом постоянно довлеет
необходимость прибыли».
Кроме дополнения в творительном падеже
с предлогом «над» изредка встречается
и прямое дополнение с глаголом «довлеть»:
«Но довлеет ощущение противоестественного».
Новое значение появилось в 1920-х годах
после социальных потрясений (вместе со
словом «солянка»). В 1930-х годах оно
получило распространение и в словаре
Ушакова помечено как просторечное.
Лингвисты борются с ним уже полвека и,
в конце концов, сами стали его употреблять.
В «Словаре лингвистических терминов»
Ахмановой: «Фразеологизм. Словосочетание
в котором семантическая монолитность
довлеет над структурной раздельностью
составляющих его элементов». Должен ли
редактор после этого исправлять массовую
ошибку? Нет. Тем более что некоторые
специальные словари давно дают такие
смелые рекомендации: «…в настоящее
время следует уже признать вполне
литературным»[5[12]]новое значение глагола «довлеть».
Уточним: пора указывать в толковых
словарях два значения слова – старое
и новое.
Что останавливает лексикографов в
признании нормативным нового значения
слова «довлеть». Думается, здесь две
причины. Первая – конкретная, относящаяся
именно к этому слову. Дело в том, что у
его нового значения есть некоторая
этимологическая ущербность, ведь оно
явно возникло под воздействием слова
«давить». Узаконить новое значение –
значит узаконить ложную (народную)
этимологию. К этому любопытный пример
из научно-популярной книги: «Без мер по
сохранению лесов от пожара все наши
планы и работы по повышению продуктивности
лесов становятся совершенно нереальными,
потому что над ними всегда будет давлетьопасность нарушения их пожарами».
(Новосибирск. 1981).
В слове «давлеть» ложная этимология
доведена до логического конца – до
изменения орфографии. Может быть, начался
новый период в истории слова, который
когда-нибудь закончится оправданием
орфографической ошибки? Маловероятно.
Но то, что период борьбы нового значения
слова за свое литературное существование
закончился, это следует признать и
составителям толковых словарей и
редакторам.
Есть и вторая причина, из-за которой
тормозится это признание. Это общая
причина, относящаяся к любому языковому
новшеству, – принципиальный консерватизм
составителей словарей, ведущий к
торможению языкового развития, что
является благом для передачи культуры.
Если бы русский язык развивался хотя
бы в два раза быстрее, для нас Пушкин
был так же старомоден, как Ломоносов.
Сами лексикографы свой консерватизм
не осознают, хотя механизм его очень
прост. Человек усваивает нормы родного
языка в молодости. А составляют словари
люди профессионально подготовленные,
опытные, то есть немолодые. И они
бессознательно учитывают свою субъективную
оценку при кодификации языковых явлений:
из двух вариантов правильный тот, который
старый, а неправильный тот, который
новый.
Такой же трудный случай – слово
иноязычного происхождения – «апробация».И его производные – «апробировать»,
«апробированный», «апробационный»,
«апробирование».
Современное обрусевшее слово «апробация»
имеет значение – «официальное
одобрение, вынесенное на основании
испытаний, проверки»(4-томный толковый
словарь). У слова очень долгая, запутанная
история, и, чтобы понять его нынешние
проблемы, надо эту историю знать.
По происхождению это латинское слово
– approbatio. Обратите внимание: в латинском
слове два «р» на морфологическом стыке:
ар (приставка) и probatio (основа). Но у
латинского слова не только форма другая,
содержание тоже: значение латинского
слова – одобрение, признание, согласие.
Нет никакого испытания и проверки.
В русский язык слово вошло именно в
такой форме и в таком значении. Таким
оно было у А.С. Пушкина: «26 августа написан
был мирный трактат, и Румянцев повез
его на аппробацию Петра…», то есть на
одобрение, утверждение. Слово было
редким и употреблялось в канцелярской
сфере. В послепушкинскую эпоху началась
его деформация. Сперва упростилось
двойное «п» – это зафиксировано в
словаре Даля.
Искажение формы потянуло за собой
искажение смысла. Изуродованное слово
«апробация» сблизилось с похожим словом
«опробование», и тогда по закону ложной
этимологии появились другие слова-уродцы:
«апробованный», «апробовать» (в
орфографическом словаре 1893 года). Тогда
же, в конце XIX века, изменилось и значение
слова «апробация»: оно стало означать
– одобрение после опробования, испытания.
В XX веке слово перешло из канцелярской
сферы в научную, а позднее попало в
газету и получило широкое распространение
и множество производных форм. Сейчас
слово «апробация» (вместе с производными)
встречается в трех значениях, хотя в
словарях представлено только одно.
Все еще встречается старое значение
слова – одобрение (без испытания):
«Завершением подготовительного периода
является апробация начерно написанной
работы на заседании совета».
Распространено и словарное значение –
одобрение после испытания: «К научным
методам можно отнести только те методы
лечения, которые прошли методологически
правильную апробацию».
Но языковая практика обгоняет словарь,
и слово «апробация» чаще всего
употребляется в значении «опробование»:
«Промышленники наотрез отказывались
браться за никем еще не апробированный
проект»; «Путь апробированный, правильнее
будет сказать – традиционный»; «Три из
семи посланных во Вьетнам на апробирование
самолетов разбилось при выполнении
первого же задания.»
Мало того что слово «апробация» стало
вытесняться словом «апробирование»,
так еще и слово «апробирование» из-за
туманной морфологии (что означает
начальное «а»?) превратилось в понятное
слово «опробирование»: «Сейчас эти
модели после успешного опробирования
в столичных кинотеатрах переданы в
серийное производство». Очень логичная
история слова: аппробация – апробация
– опробирование. Но пока что последнего
слова в словарях нет. Но обязательно
появится, хотя у него есть более
привлекательный синоним «опробование».
Таков должен быть научный багаж
квалифицированного литературного
редактора. А редактировать, просто
заглядывая в словари, может и дилетант.
И еще один, третий сложный случай из
практики редактирования.
В 1970-е годы в советских газетах
распространилось, стало модным слово
«напрочь».Но не в словарном
значении.
В толковом словаре Ожегова издания 1978
года (9-е издание) слово «напрочь» снабжено
пометой «просторечное» и имеет значение
– совсем, окончательно (отрубить,
оторвать):«Сергей, бледный, оглушенный
страшной болью, стоял, как во сне, и все
пытался левой рукой приладить напрочь
оторванную кисть правой.» (Газета).
Но слово употреблялось гораздо чаще в
другом значении, хотя и близком первому:
совсем, совершенно:
«В вас напрочь отсутствует стратегическое
видение проблемы». (Ю. Семенов, роман
«Испанский вариант»).
«Пойти за материалом – не значит,
конечно, напрочь отказаться от какого
бы то ни было творческого замысла». (Ю.
Семенов, газетная статья).
«Чиновники посольства США напрочь
отрицали свою причастность к событиям».
(Газета).
«В старинной интеллигентной Валиной
семье водочного духа не переносили
напрочь». (Газета).
«И напрочь отсутствовал занавес».
(Телефильм).
Исправлять эту ошибку уже поздно, она
победила, что и было зафиксировано через
четыре года. В 4-томном толковом словаре
издания 1982 года (2-е издание) слово
«напрочь» уже снабжено более мягкой
стилистической пометой «разговорное»
и имеет значение – совсем,
вовсе. Иначе говоря, в словаре объединены
оба значения – старое и новое – в одно.
Семантические ошибки в программировании
Ранее я рассказывал о видах ошибок в программировании. И там я упомянул об ошибках, которые я назвал логическими. Но вообще такие ошибки часто называют семантическими. И это самые труднонаходимые ошибки, которые доставляют программистам больше всего неприятностей. Поэтому я решил рассказать о них отдельно.
Семантика — это раздел лингвистики (науки о языках), который изучает смысловое значение частей языка (слов, предложений и т.п.).
Поскольку языки программирования — это тоже языки, то и правила и термины лингвистики точно также применимы и к языкам программирования. А семантика в языке программирования означает то же самое, что и в человеческом языке, например, в русском.
Семантика определяет смысл программы, а семантические ошибки связаны с нарушением смысла программы. То есть семантические ошибки нарушают логику программы (поэтому я и назвал их ранее логическими).
С точки зрения синтаксиса программа может быть безупречной. И даже во время выполнения в ней может не быть никаких ошибок. Но при этом она может быть бессмысленна с точки зрения решаемой задачи.
Например, вам надо было написать программу, которая вычисляет площадь круга. А вы “немного” ошиблись, и ваша программа вычисляет площадь прямоугольника.
При этом:
- Программа компилируется без ошибок
- Программа запускается, работает и завершается без ошибок
- Программа получает данные, обрабатывает их и выдаёт результат
Но, что самое страшное — пользователь думает, что результат правильный!!!
То есть программа безупречна во всём. Кроме одного — она решает не ту задачу, которую нужно решить пользователю. Поэтому с точки зрения пользователя она бессмысленна.
А с точки зрения программиста она содержит семантическую ошибку.
Такая программа делает не то, что вы от неё хотели, а то, что вы ей сказали. Вы ей сказали вычислять площадь прямоугольника, и она делает это. И это не её вина, а ваша. Вы дали неправильное указание.
Кстати, плохие руководители в жизни ведут себя точно также — дают сотрудникам неправильные или неоднозначные распоряжения, а потом удивляются, что работа выполнена неправильно. И обвиняют в этом, конечно, сотрудников.
Находить семантические ошибки бывает очень трудно. Особенно в чужих программах. Я это знаю не понаслышке. Иногда на это уходит несколько дней или даже недель. Иногда вообще хочется плюнуть на это и написать новую программу.
Так что старайтесь ещё до того, как начнёте писать код, тщательно продумать алгоритмы и прочие способы решения задачи, чтобы потом не было мучительно больно при поиске таких ошибок, которые не видит компилятор, и мучительно стыдно перед заказчиком.
А на сегодня всё. Подключайтесь к каналу в Телеграм или к другим моим группам, чтобы ничего не пропустить.
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее… |
Добавлено 30 мая 2021 в 17:27
В уроке «3.1 – Синтаксические и семантические ошибки» мы рассмотрели синтаксические ошибки, которые возникают, когда вы пишете код, который не соответствует грамматике языка C++. Компилятор уведомит вас об ошибках этого типа, поэтому их легко обнаружить и обычно легко исправить.
Мы также рассмотрели семантические ошибки, которые возникают, когда вы пишете код, который выполняет не то, что вы планировали. Как правило, компилятор не обнаруживает семантических ошибок (хотя в некоторых случаях умные компиляторы могут генерировать предупреждения).
Семантические ошибки могут вызывать большинство из симптомов неопределенного поведения, например, приводить к тому, что программа выдает неправильные результаты, быть причиной неустойчивого поведения, искажать данные программы, вызывать сбой программы – или они могут вообще никак не влиять.
При написании программ семантические ошибки практически неизбежны. Некоторые из них вы, вероятно, заметите, просто используя программу: например, если вы писали игру лабиринт, а ваш персонаж может проходить сквозь стены. Тестирование вашей программы (7.12 – Введение в тестирование кода) также может помочь выявить семантические ошибки.
Но есть еще одна вещь, которая может помочь – это знание того, какой тип семантических ошибок наиболее распространен, чтобы вы могли потратить немного больше времени на то, чтобы убедиться, что в этих случаях всё правильно.
В этом уроке мы рассмотрим ряд наиболее распространенных типов семантических ошибок, возникающих в C++ (большинство из которых так или иначе связаны с управлением порядком выполнения программы).
Условные логические ошибки
Один из наиболее распространенных типов семантических ошибок – это условная логическая ошибка. Условная логическая ошибка возникает, когда программист неправильно пишет логику условного оператора или условия цикла. Вот простой пример:
#include <iostream>
int main()
{
std::cout << "Enter an integer: ";
int x{};
std::cin >> x;
if (x >= 5) // упс, мы использовали operator>= вместо operator>
std::cout << x << " is greater than 5";
return 0;
}
А вот результат запуска программы, при котором была обнаружена эта условная логическая ошибка:
Enter an integer: 5
5 is greater than 5
Когда пользователь вводит 5, условное выражение x >= 5
принимает значение true
, поэтому выполняется соответствующая инструкция.
Вот еще один пример для цикла for
:
#include <iostream>
int main()
{
std::cout << "Enter an integer: ";
int x{};
std::cin >> x;
// упс, мы использовали operator> вместо operator<
for (unsigned int count{ 1 }; count > x; ++count)
{
std::cout << count << ' ';
}
return 0;
}
Эта программа должна напечатать все числа от 1 до числа, введенного пользователем. Но вот что она на самом деле делает:
Enter an integer: 5
Она ничего не напечатала. Это происходит потому, что при входе в цикл for
условие count > x
равно false
, поэтому цикл вообще не повторяется.
Бесконечные циклы
В уроке «7.7 – Введение в циклы и инструкции while
» мы рассмотрели бесконечные циклы и показали этот пример:
#include <iostream>
int main()
{
int count{ 1 };
while (count <= 10) // это условие никогда не будет ложным
{
std::cout << count << ' '; // поэтому эта строка выполняется многократно
}
return 0; // эта строка никогда не будет выполнена
}
В этом случае мы забыли увеличить count
, поэтому условие цикла никогда не будет ложным, и цикл продолжит печатать:
1 1 1 1 1 1 1 1 1 1
пока пользователь не закроет программу.
Вот еще один пример, который преподаватели любят задавать в тестах. Что не так со следующим кодом?
#include <iostream>
int main()
{
for (unsigned int count{ 5 }; count >= 0; --count)
{
if (count == 0)
std::cout << "blastoff! ";
else
std::cout << count << ' ';
}
return 0;
}
Эта программа должна напечатать «5 4 3 2 1 blastoff!«, что она и делает, но не останавливается на достигнутом. На самом деле она печатает:
5 4 3 2 1 blastoff! 4294967295 4294967294 4294967293 4294967292 4294967291
а затем просто продолжает печатать уменьшающиеся числа. Программа никогда не завершится, потому что условие count >= 0
никогда не может быть ложным, если count
является целым числом без знака.
Ошибки на единицу
Ошибки «на единицу» возникают, когда цикл повторяется на один раз больше или на один раз меньше, чем это необходимо. Вот пример, который мы рассмотрели в уроке «7.9 – Инструкции for
»:
#include <iostream>
int main()
{
for (unsigned int count{ 1 }; count < 5; ++count)
{
std::cout << count << ' ';
}
return 0;
}
Этот код должен печатать «1 2 3 4 5«, но он печатает только «1 2 3 4«, потому что был использован неправильный оператор отношения.
Неправильный приоритет операторов
Следующая программа из урока «5.7 – Логические операторы» допускает ошибку приоритета операторов:
#include <iostream>
int main()
{
int x{ 5 };
int y{ 7 };
if (!x > y)
std::cout << x << " is not greater than " << y << 'n';
else
std::cout << x << " is greater than " << y << 'n';
return 0;
}
Поскольку логическое НЕ имеет более высокий приоритет, чем operator>
, условное выражение вычисляется так, как если бы оно было написано (!x) > y
, что не соответствует замыслу программиста.
В результате эта программа печатает:
5 is greater than 7
Это также может произойти при смешивании в одном выражении логического ИЛИ и логического И (логическое И имеет больший приоритет, чем логическое ИЛИ). Используйте явные скобки, чтобы избежать подобных ошибок.
Проблемы точности с типами с плавающей запятой
Следующая переменная с плавающей запятой не имеет достаточной точности для хранения всего числа:
#include <iostream>
int main()
{
float f{ 0.123456789f };
std::cout << f;
}
Как следствие, эта программа напечатает:
0.123457
В уроке «5.6 – Операторы отношения и сравнение чисел с плавающей запятой» мы говорили о том, что использование operator==
и operator!=
может вызывать проблемы с числами с плавающей запятой из-за небольших ошибок округления (а также о том, что с этим делать). Вот пример:
#include <iostream>
int main()
{
// сумма должна быть равна 1.0
double d{ 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 };
if (d == 1.0)
std::cout << "equal";
else
std::cout << "not equal";
}
Эта программа напечатает:
not equal
Чем больше вы выполняете арифметических действий с числом с плавающей запятой, тем больше в нем накапливаются небольшие ошибки округления.
Целочисленное деление
В следующем примере мы хотим выполнить деление с плавающей запятой, но поскольку оба операнда принадлежат целочисленному типу, вместо этого мы выполняем целочисленное деление:
#include <iostream>
int main()
{
int x{ 5 };
int y{ 3 };
std::cout << x << " divided by " << y << " is: " << x / y; // целочисленное деление
return 0;
}
Этот код напечатает:
5 divided by 3 is: 1
В уроке «5.2 – Арифметические операторы» мы показали, что мы можем использовать static_cast
для преобразования одного из целочисленных операндов в значение с плавающей запятой, чтобы выполнять деление с плавающей запятой.
Случайные пустые инструкции
В уроке «7.3 – Распространенные проблемы при работе с операторами if
» мы рассмотрели пустые инструкции, которые ничего не делают.
В приведенной ниже программе мы хотим взорвать мир, только если у нас есть разрешение пользователя:
#include <iostream>
void blowUpWorld()
{
std::cout << "Kaboom!n";
}
int main()
{
std::cout << "Should we blow up the world again? (y/n): ";
char c{};
std::cin >> c;
if (c=='y'); // здесь случайная пустая инструкция
blowUpWorld(); // поэтому это всегда будет выполняться, так как это не часть оператора if
return 0;
}
Однако из-за случайной пустой инструкции вызов функции blowUpWorld()
выполняется всегда, поэтому мы взрываем независимо от ввода:
Should we blow up the world again? (y/n): n
Kaboom!
Неиспользование составной инструкции, когда она требуется
Еще один вариант приведенной выше программы, которая всегда взрывает мир:
#include <iostream>
void blowUpWorld()
{
std::cout << "Kaboom!n";
}
int main()
{
std::cout << "Should we blow up the world again? (y/n): ";
char c{};
std::cin >> c;
if (c=='y')
std::cout << "Okay, here we go...n";
blowUpWorld(); // упс, всегда будет выполняться. Должно быть внутри составной инструкции.
return 0;
}
Эта программа печатает:
Should we blow up the world again? (y/n): n
Kaboom!
Висячий else
(рассмотренный в уроке «7.3 – Распространенные проблемы при работе с операторами if
») также попадает в эту категорию.
Что еще?
Приведенные выше примеры представляют собой хороший образец наиболее распространенных типов семантических ошибок, которые склонны совершать на C++ начинающие программисты, но их гораздо больше. Читатели, если у вас есть дополнительные примеры, которые, по вашему мнению, являются распространенными ошибками, напишите об этом в комментариях.
Теги
C++ / CppLearnCppДля начинающихОбучениеПрограммирование
Семантическая ошибка
Cтраница 1
Семантические ошибки изменяют содержание информации, не подвергая при этом модификации ее синтаксическую структуру. Следует отметить, что некоторые ошибки, например отсутствие значения реквизита, можно интерпретировать как синтаксические, так и семантические.
[1]
Устранены синтаксические и семантические ошибки в записи подпрограммы. Количество ошибок в записи программы в основном зависит от ее объема и квалификации разработчика. Программы объемом порядка тысячи команд, выполненные специалистом средней квалификации, в первичной записи содержат в среднем 10 — 20 ошибок. Устранение ошибок производится либо корректировкой отдельных команд первичной записи программы, либо требует переписи всей программы. Выбор способа корректировки зависит от типов и количества ошибок. В некоторых случаях корректировка программы может потребовать одновременной корректировки блок-схемы алгоритма.
[2]
Поиск семантических ошибок составляет наиболее трудную часть работы программиста.
[3]
Выявление семантических ошибок возможно только с помощью алгоритмов специального математического обеспечения. Эта функция должна защитить информационную базу и органы управления от ошибочной ( недостоверной) информации.
[4]
РПГ позволяет обнаруживать семантические ошибки. Средства контроля семантических ошибок вставляются транслятором в объектный модуль в процессе его создания. При выполнении загрузочного модуля в случае обнаружения ошибки включается указатель останова НО, играющий роль индикатора ошибочной ситуации. Указатель является внутренним, используется автоматически и определению в программе не подлежит. С помощью указателя НО контролируются ошибки ввода-вывода, ошибки, обусловленные неправильным использованием связок и полей подбора, и некоторые другие.
[5]
Транслятор при обнаружении синтаксических и семантических ошибок выдает информацию о них по желанию оператора на алфавитно-цифровом печатающем устройстве, телетайпе или быстродействующей печати.
[6]
Интерпретатор должен выявить все синтаксические и семантические ошибки, встретившиеся в очередной СО-программе. Отлаживать интерпретатор следует не только на правильных СО-программах, но и на программах, содержащих различного рода ошибки.
[7]
В случае обнаружения в команде синтаксических или семантических ошибок система ее не выполняет, а выдает на экран диагностическое сообщение.
[8]
В алгоритме 165 была обнаружена одна опечатка и одна семантическая ошибка.
[9]
Кроме синтаксического анализа транслятор проводит и семантический анализ, обнаруживая семантические ошибки.
[10]
Средствами отладки является программая диагностика, позволяющая выявить логические и некоторые семантические ошибки, которые могут появиться в ПГ.
[11]
Таким образом, закончилась диалоговая отладка программы, то есть исправлены синтаксические и семантические ошибки. Конечно, приведен очень небольшой пример, но он отражает суть диалоговой отладки. Наиболее рациональным путем последующего решения полученной программы является использование оптимизирующего транслятора.
[12]
Отладка начинается с момента компиляции программы, так как обнаружение компилятором синтаксических и частично семантических ошибок является одной из стадий отладки. Большинство ошибок обнаруживается и исправляется именно на этой стадии контроля. Начинающий программист убежден, что при компиляции обнаруживаются все ошибки. Более опытный программист знает, что наиболее коварные синтаксические ошибки не будут обнаружены компилятором.
[13]
Одним из общих недостатков любой централизованной системы подготовки данных является замедленная реакция исполнителя на семантические ошибки ( ошибки автора), обнаруженные ЭВМ в процессе выполнения контрольных операций. Действительно, для того чтобы ликвидировать ошибки в первичных документах, необходимо всякий раз обращаться к автору.
[14]
Страницы:
1
2
3
4
СЕМАНТИЧЕСКАЯ ОШИБКА
- СЕМАНТИЧЕСКАЯ ОШИБКА
- Любая ошибка в отношении предъявленного стимула, основанная на семантическом факторе. Например, запоминание слова волк, когда фактическим стимулом было слово лиса. Ср. с акустической ошибкой.
Толковый словарь по психологии.
2013.
Смотреть что такое «СЕМАНТИЧЕСКАЯ ОШИБКА» в других словарях:
-
семантическая ошибка — — [http://www.iks media.ru/glossary/index.html?glossid=2400324] Тематики электросвязь, основные понятия EN semantic error … Справочник технического переводчика
-
Semantic error — Семантическая ошибка … Краткий толковый словарь по полиграфии
-
Овеществление — (реификация) в основном относится к призванию к жизни или превращению в конкретное. В частности, овеществление может означать: В информатике создание модели данных для абстрактного ранее понятия. Заблуждение ошибка… … Википедия
-
Реификация — В этой статье не хватает ссылок на источники информации. Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена. Вы можете … Википедия
-
гипостазирование — (от греч. hypostasis сущность, субстанция) логическая (семантическая) ошибка, заключающаяся в опредмечивании абстрактных сущностей, в приписывании им реального, предметного существования. Эту ошибку допускает, напр., тот, кто считает, что наряду… … Словарь терминов логики
-
ГИПОСТАЗИРОВАНИЕ — (от греч. hypostasis сущность, субстанция) логическая (семантическая) ошибка, заключающаяся в опредмечивании абстрактных сущностей, в приписывании им реального, предметного существования. Эту ошибку допускает, напр., тот, кто считает, что наряду… … Философская энциклопедия
-
ГИПОСТАЗИРОВАНИЕ — (греч. hypostasis сущность, субстанция) 1) рассмотрение абстрактных объектов, не обладающих временным и пространственным онтологическими статусами, в качестве непосредственных объектов человеческого мышления. Вневременность и… … Социология: Энциклопедия
-
Список кодов состояния HTTP — HTTP Постоянное соединение · Сжатие · HTTPS Методы OPTIONS · GET · HEAD · POST · PUT · DELETE · TRACE · CONNECT · PATCH Заголовки Cookie · ETag · Location · Referer DNT · X Forwarded For … Википедия
-
XML — (англ. eXtensible Markup Language) расширяемый язык разметки Расширение .xml … Википедия
-
Указатели сюжетов фольклорных сказок — Указатель сюжетов фольклорной сказки это каталог, в котором классифицируются и систематизируются фольклорные сказочные сюжеты. Общепризнанным указателем фольклорной сказки, отражающий международный сказочный материал, признан в научных,… … Википедия
The third type of error is the semantic error, also called a logic error. If there is a semantic error
in your program, it will run successfully in the sense that the computer will
not generate any error messages. However, your program will not do the right thing. It will do
something else. Specifically, it will do what you told it to do, not what you wanted it to do.
The following program has a semantic error. Execute it to see what goes wrong:
This program runs and produces a result. However, the result is not what the programmer intended. It contains
a semantic error. The error is that the program performs concatenation instead of addition, because the programmer
failed to write the code necessary to convert the inputs to integers.
With semantic errors, the problem is that the program you wrote is not the program you wanted to
write. The meaning of the program (its semantics) is wrong. The computer is
faithfully carrying out the instructions you wrote, and its results
are correct, given the instructions that you provided. However, because your instructions
have a flaw in their design, the program does not behave as desired.
Identifying semantic errors can be tricky because no error message appears to make it obvious that the results are
incorrect. The only way you can detect semantic errors is if you know in advance what the program should do for a given set
of input. Then, you run the program with that input data and compare the output of the program with what you expect. If
there is a discrepancy between the actual output and the expected output, you can conclude that there is either 1) a
semantic error or 2) an error in your expected results.
Once you’ve determined that you have a semantic error, locating it can be tricky because you must work
backward by looking at the output of the program and trying to figure out what it is doing.
3.7.1. Test Cases¶
To detect a semantic error in your program, you need the help of something called a test case.
Test Case
A test case is a set of input values for the program, together with the output that you expect the program should produce when it is run with those particular
inputs.
Here is an example of a test case for the program above:
Test Case --------- Input: 2, 3 Expected Output: 5
If you give this test case to someone and ask them to test the program, they can type in the inputs, observe the output,
check it against the expected output, and determine whether a semantic error exists based on whether the actual output
matches the expected output or not. The tester doesn’t even have to know what the program is supposed to do. For this reason,
software companies often have separate quality assurance departments whose responsibility is to check that the programs written
by the programmers perform as expected. The testers don’t have to be programmers; they just have to be able to operate the
program and compare its results with the test cases they’re given.
In this case, the program is so simple that we don’t need to write down a test case at all; we can compute the expected output
in our heads with very little effort. More complicated programs require effort to create the test case (since you shouldn’t use
the program to compute the expected output; you have to do it with a calculator or by hand), but the effort pays off when
the test case helps you to identify a semantic error that you didn’t know existed.
Semantic errors are the most dangerous of the three types of errors, because in some cases they are not noticed by either
the programmers or the users who use the program. Syntax errors cannot go undetected (the program won’t run at all if
they exist), and runtime errors are usually also obvious and typically detected by developers before a program is
released for use (although it is possible for a runtime error to occur for some inputs and not for
others, so these can sometimes remain undetected for a while). However, programs often go for years with undetected
semantic errors; no one realizes that the program has been producing incorrect results. They just assume that because the
results seem reasonable, they are correct. Sometimes, these errors are relatively harmless. But if they involve
financial transactions or medical equipment, the results can be harmful or even deadly. For this reason, creating test
cases is an important part of the work that programmers perform in order to help them produce programs that work
correctly.
Check your understanding
- Attempting to divide by 0.
- A semantic error is an error in logic. In this case the program does not produce the correct output because the problem is not solved correctly. This would be considered a run-time error.
- Forgetting a semi-colon at the end of a statement where one is required.
- A semantic error is an error in logic. In this case the program does not produce the correct output because the code can not be processed by the compiler or interpreter. This would be considered a syntax error.
- Forgetting to divide by 100 when printing a percentage amount.
- This will produce the wrong answer because the programmer implemented the solution incorrectly. This is a semantic error.
Which of the following is a semantic error?
- The programmer.
- You must fully understand the problem so the you can tell if your program properly solves it.
- The compiler / interpreter.
- The compiler and / or interpreter will only do what you instruct it to do. It does not understand what the problem is that you want to solve.
- The computer.
- The computer does not understand your problem. It just executes the instructions that it is given.
- The teacher / instructor.
- Your teacher and instructor may be able to find most of your semantic errors, but only because they have experience solving problems. However it is your responsibility to understand the problem so you can develop a correct solution.
Who or what typically finds semantic errors?
You have attempted of activities on this page
The third type of error is the semantic error, also called a logic error. If there is a semantic error
in your program, it will run successfully in the sense that the computer will
not generate any error messages. However, your program will not do the right thing. It will do
something else. Specifically, it will do what you told it to do, not what you wanted it to do.
The following program has a semantic error. Execute it to see what goes wrong:
This program runs and produces a result. However, the result is not what the programmer intended. It contains
a semantic error. The error is that the program performs concatenation instead of addition, because the programmer
failed to write the code necessary to convert the inputs to integers.
With semantic errors, the problem is that the program you wrote is not the program you wanted to
write. The meaning of the program (its semantics) is wrong. The computer is
faithfully carrying out the instructions you wrote, and its results
are correct, given the instructions that you provided. However, because your instructions
have a flaw in their design, the program does not behave as desired.
Identifying semantic errors can be tricky because no error message appears to make it obvious that the results are
incorrect. The only way you can detect semantic errors is if you know in advance what the program should do for a given set
of input. Then, you run the program with that input data and compare the output of the program with what you expect. If
there is a discrepancy between the actual output and the expected output, you can conclude that there is either 1) a
semantic error or 2) an error in your expected results.
Once you’ve determined that you have a semantic error, locating it can be tricky because you must work
backward by looking at the output of the program and trying to figure out what it is doing.
3.7.1. Test Cases¶
To detect a semantic error in your program, you need the help of something called a test case.
Test Case
A test case is a set of input values for the program, together with the output that you expect the program should produce when it is run with those particular
inputs.
Here is an example of a test case for the program above:
Test Case --------- Input: 2, 3 Expected Output: 5
If you give this test case to someone and ask them to test the program, they can type in the inputs, observe the output,
check it against the expected output, and determine whether a semantic error exists based on whether the actual output
matches the expected output or not. The tester doesn’t even have to know what the program is supposed to do. For this reason,
software companies often have separate quality assurance departments whose responsibility is to check that the programs written
by the programmers perform as expected. The testers don’t have to be programmers; they just have to be able to operate the
program and compare its results with the test cases they’re given.
In this case, the program is so simple that we don’t need to write down a test case at all; we can compute the expected output
in our heads with very little effort. More complicated programs require effort to create the test case (since you shouldn’t use
the program to compute the expected output; you have to do it with a calculator or by hand), but the effort pays off when
the test case helps you to identify a semantic error that you didn’t know existed.
Semantic errors are the most dangerous of the three types of errors, because in some cases they are not noticed by either
the programmers or the users who use the program. Syntax errors cannot go undetected (the program won’t run at all if
they exist), and runtime errors are usually also obvious and typically detected by developers before a program is
released for use (although it is possible for a runtime error to occur for some inputs and not for
others, so these can sometimes remain undetected for a while). However, programs often go for years with undetected
semantic errors; no one realizes that the program has been producing incorrect results. They just assume that because the
results seem reasonable, they are correct. Sometimes, these errors are relatively harmless. But if they involve
financial transactions or medical equipment, the results can be harmful or even deadly. For this reason, creating test
cases is an important part of the work that programmers perform in order to help them produce programs that work
correctly.
Check your understanding
- Attempting to divide by 0.
- A semantic error is an error in logic. In this case the program does not produce the correct output because the problem is not solved correctly. This would be considered a run-time error.
- Forgetting a semi-colon at the end of a statement where one is required.
- A semantic error is an error in logic. In this case the program does not produce the correct output because the code can not be processed by the compiler or interpreter. This would be considered a syntax error.
- Forgetting to divide by 100 when printing a percentage amount.
- This will produce the wrong answer because the programmer implemented the solution incorrectly. This is a semantic error.
Which of the following is a semantic error?
- The programmer.
- You must fully understand the problem so the you can tell if your program properly solves it.
- The compiler / interpreter.
- The compiler and / or interpreter will only do what you instruct it to do. It does not understand what the problem is that you want to solve.
- The computer.
- The computer does not understand your problem. It just executes the instructions that it is given.
- The teacher / instructor.
- Your teacher and instructor may be able to find most of your semantic errors, but only because they have experience solving problems. However it is your responsibility to understand the problem so you can develop a correct solution.
Who or what typically finds semantic errors?
You have attempted of activities on this page