Несколько человек высказались за второе. Я не согласен с ними. Хотя изначально (очевидно) была небольшая проблема с =
против ==
в первой, я бы сказал, что это небольшая проблема.
Гораздо более серьезная проблема заключается в том, что люди слишком часто (особенно если они спешат) слишком часто пропускают проверку ошибок - полностью исключая if (whatever == -1)
, обычно по теории, что они работать быстро, одноразовый код и проверка на наличие ошибок на самом деле не нужны. Это действительно плохая привычка; Я могу практически гарантировать, что каждый человек, читающий это, видел настоящий код, который пропускал проверку ошибок, как это, хотя он действительно, действительно должен был иметь это.
В подобном коде попытка открыть файл и проверка на ошибку в этом случае должна быть неразрывно связана друг с другом. Помещение двух в одно и то же утверждение отражает правильное намерение. Разделять эти два элемента просто неправильно - они должны не быть разделены каким-либо образом в любое время и по любой причине. Это должно быть закодировано как одна операция, потому что должно быть одна операция. Его всегда следует рассматривать и кодировать как одну операцию.
Оправдания за то, чтобы поступить иначе, на мой взгляд, довольно слабые. Реальность такова, что любой, кто использует C , нуждается в , чтобы иметь возможность читать код, который сочетает в себе назначение с условным тестом. Просто для наглядного примера, цикл вроде while ((ch=getchar()) != EOF)
в значительной степени требует, чтобы был написан как комбинированное присваивание и тестирование - попытка проверить EOF
отдельно обычно приводит к коду, который просто не работает правильно, и если вы сделаете так, чтобы он работал правильно, код будет значительно сложнее.
Аналогично, с проблемой -
против ==
. Поскольку я не видел вначале дефекта, я не уверен, сколько бы делилось на разделение, чтобы избежать проблем, но мое непосредственное предположение состоит в том, что это, вероятно, почти ничего не изменило. Компиляторы, которые будут предупреждать вас, когда то, что должно было быть условием, содержит только назначение, существовали годами (например, gcc). В большинстве случаев симптомы почти сразу становятся очевидными - короче говоря, тот факт, что вы сделали конкретную опечатку в одной части этого сообщения, но не в другой, не доказывает (или, честно говоря, даже не указывает) многое из относительного сложность двух.
Основываясь на такого рода доказательствах, я, по-видимому, считаю, что «не» сложнее набрать, чем «немедленно», поскольку я просто набрал «сразу» без проблем, но пришлось исправить «нет» ( дважды , не менее) до того, как оно вышло прямо в предыдущем предложении. Я почти уверен, что если бы мы знали, как часто я набираю опечатку, «the» - самое трудное слово в английском языке.