Комментарии 13
GCC не проверяли?
Когда меня в следующий раз спросят, почему я пишу парсеры с нуля, а не использую готовые решения общего назначения - буду отвечать ссылкой на эту статью.
Ошибка 1 - типичное последствие дурного дизайна языка. Запятая по сути отбрасывает выражение до неё и возвращает то, что стоит после неё. При этом я не вижу случая, где это было бы реально полезно. Посему было бы неплохо, чтобы компиляторы предупреждение на её использование выдавали (если ещё этого не делают).
Ошибка 7 - не понятно, почему этот код компилируется. Сравнивать указатели на == и != с нулём ещё имеет смысл. Но зачем нужно сравнение на больше/меньше? Тут надо бы ошибку компиляции выдавать.
Ну, почему же: сравнение индексов массива по указателям на его элементы без дополнительной арифметики.
Сравнение указателя с указателем это одно. Это действительно полезно. Но в статье показан случай сравнения указателя с численной константой, что смысла никакого не имеет.
Меня недавно удивило, что такой код не компилируется (хотя я считал, что должен):
void foo(int *out) {
out = 0x01;
}
Да, я хочу записать единицу как адрес. Возможно, msvc компилятор поумнел.
19 ошибок в LLVM 19