#c #performance #variables #if-statement #null
#c #Производительность #переменные #if-оператор #null
Вопрос:
В чем разница между этим:
if( varName != NULL ){
// Do something
}
И:
if( varName ){
// Do something
}
Я имею в виду, есть ли разница в скорости процесса? Или это только лучшая производительность?
PD: Я работаю с C.
Комментарии:
1. Разницы нет
2. Лучший способ ответить на этот вопрос — скомпилировать с
-S
параметром, а затем посмотреть на результирующую сборку. При отключенной оптимизации может быть разница, но при включенной оптимизации код сборки должен быть идентичным.3. Это дело вкуса, мне нравится
if (varName != NULL)
. Некоторым нравитсяif (varName)
, и вы сделали что-то, что я считаю действительно уродливымif(_something_)
_
, то, что пробел выглядит ужасно. В любом случае, этот вопрос должен быть закрыт.4. Зависит от типа
varName
5. @iharob Для тебя это некрасиво, и я знаю, что это твое мнение, и я его уважаю, но для меня так удобнее. И почему «этот вопрос должен быть закрыт»? Я имею в виду, что эта платформа не помогает найти решение для людей, у которых проблемы с кодированием или программированием? Если вы хотите закрыть этот вопрос, потому что вы не учитываете пробелы в операторе if, это не означает, что вопрос должен быть закрыт.
Ответ №1:
В случае производительности нет разницы, но разница в намерениях может быть значительной. Предполагая, что NULL
макрос определен как (void *) 0
, этот код:
if( varName != NULL ) {
// Do something
}
принудительно это varName
должен быть объект-указатель. Например, следующий код выдаст сообщение об ошибке:
int varName = 0;
if ( varName != NULL ) {
// Do something
}
ошибка: сравнение между указателем и целым числом
Следовательно, эту практику можно рассматривать как своего рода защитное программирование, хотя ее ценность довольно обсуждаема, поскольку обе формы одинаково идиоматичны.
Комментарии:
1. И это делает код более читаемым. Просматривая код и видя сравнение с
NULL
, вы знаете, что тип является указателем, а не целочисленным типом, не находя объявление переменной.2. @Флюгер: сомнительное преимущество, чем-то похожее на привычку приводить результат
malloc
. Сторонники последнего также часто утверждают, что это помогает им «знать тип, не находя объявление». На самом деле «знание типа» — это пресловутый костыль, который часто нужен разработчикам C, чтобы иметь возможность «ходить». Я бы сказал, что хорошие методы программирования требуют не зависящего от типа кода. Да, даже в C. Это более читабельно. Разработчикам просто нужно научиться читать и понимать такой независимый от типа код, не полагаясь на точную информацию о типе, нужно научиться ходить без костылей.3. @AnT ваша аналогия с приведением
malloc
совсем не то же самое. Это аргумент соломенного человечка , наряду с вашим намеком на то, что я не могу ходить без костылей.