Почему базовые арифметические операторы не нуждаются в библиотеке math.h - PullRequest
0 голосов
/ 21 февраля 2019

Я получил вопрос от моего друга-студента о том, почему + - / * не нужна библиотека math.h для работы на языке Си.

Ответы [ 6 ]

0 голосов
/ 21 февраля 2019

Прежде всего, причина math.h необходима для некоторых операций, а не для других - то, что люди, которые разработали C, решили встроить некоторые вещи в основной язык и хранить некоторые вещи в отдельных наборах, в том числе набор для математики., набор вещей для строк, набор вещей для времени, набор вещей для ввода и вывода и т. д.

Можно было бы встроить вещи в math.h в основной язык,Например, sizeof встроен в язык, поэтому встраивание sqrt в язык также не потребует изменения грамматики.Кроме того, теоретически было бы возможно исключить некоторые операции, такие как *, из основного языка и потребовать, чтобы вы включили math.h перед их использованием.Тем не менее, в языке предусмотрены способы объявления функций, таких как sqrt, но не предусмотрены способы объявления операторов, таких как *, поэтому необходимо внести некоторые изменения в грамматику для поддержки этого.

Итак, поскольку возможно основной язык может включать или исключать различные вещи, тогда причины включения или исключения различных вещей в некоторой степени являются вопросом выбора.По сути, основные арифметические операции считались фундаментальными и очень полезными, поэтому они стали частью основного языка, а другие функции - нет.Этому способствуют различные факторы.

Желание избегать загромождения языка.Если бы все функции, объявленные в заголовках, были частью основного языка, то sqrt можно было бы использовать только для sqrt в math.h.Программист не может использовать sqrt для собственного имени переменной.Это хорошо для нескольких имен, но, по мере роста библиотеки, вероятность столкновения между именем в библиотеке и именем в обычном исходном коде возрастает.

Кроме того, если существует исходный коди у кого-то есть блестящая идея для новой подпрограммы, добавление имени новой подпрограммы в язык может нарушить существующий код, который уже использует это имя для других целей.

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

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

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

0 голосов
/ 21 февраля 2019

Арифметические операторы встроены в грамматику языка - они не являются отдельными библиотечными вызовами, такими как sqrt() или abs() или чем-то еще.Таким образом, им не нужно иметь какие-либо объявления в области видимости, чтобы функционировать.

0 голосов
/ 21 февраля 2019

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

0 голосов
/ 21 февраля 2019

Если вы посмотрите на C Операторы , обратите внимание, что все они являются довольно простыми операциями, которые можно выполнять с числами и значениями без необходимости вызова функции (sqrt ()).Они являются частью стандарта C и являются основной частью языка, присутствующего по умолчанию в каждой программе.

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

0 голосов
/ 21 февраля 2019

<math.h> содержит определения макросов и функций для математических операций.Некоторые функции в <math.h> должны присутствовать в соответствии со стандартом C, но они по-прежнему не являются неотъемлемой частью грамматики языка, в отличие от операторов +, -, *, / и %.

0 голосов
/ 21 февраля 2019

Потому что они в стандарте C и являются только одной инструкцией на языке ассемблера.math.h это только название библиотеки.Это не значит, что нет математики, если вы ее не включите.

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