Редактирование сегодня подразумевает, что все еще требуются дополнительные детали.
Марк имеет право.Суффикс "L" длинный.-1L, таким образом, длинный -1.
Мой любимый способ тестирования отличается от Маркса и является вопросом предпочтения, а не совершенства.
if ( err >= 0L )
success
else
error
По общей привычке я не люблю искать явный -1.Если в будущем появится -2, мой код , вероятно, не сломается.
С тех пор, как я начал использовать C, еще в начале C, я заметил, что большинство библиотечных процедур возвращаются int значения возвращают 0 в случае успеха и -1 в случае ошибки.Наиболее.
NULL обычно не возвращается целочисленными функциями, поскольку NULL является значением указателя.Помимо коллизии типов, огромная причина для того, чтобы не возвращать NULL, зависит от истории.
В те времена, когда C изобретался, вещи не были чистыми, и, возможно, даже в небольших системах сегодня.Исходный K & R C не гарантировал, что NULL будет равен нулю, как это обычно бывает на процессорах с виртуальной памятью.В небольших системах «реальной памяти» ноль может быть действительным адресом, что делает необходимым перемещение «недействительных» адресов в другое зависимое от ОС место.Такое действительно будет принято ЦП, просто не сгенерировано в обычной схеме вещей.Возможно, очень большой адрес памяти.Я даже вижу скрытый массив с именем extern const long NULL[1];
, позволяющий NULL стать адресом этого неиспользуемого массива.
В то время вы видели множество if ( ptr != NULL )
утверждений вместо if ( ptr )
для людей, серьезно относящихся к написанию переносимого кода.