Здравствуйте, alpha21264, Вы писали:
Pzz>>Причем помогает даже не от случайных ошибок, а помогает читать код. Например, когда хочешь понять, кто поднасрал в сложную структуру, внутрь функций, которые получают ее, как указатель на константу, можно не заглядывать.
A>Ну вот... фигня. A>Нормальный программист знает, что не надо менять входные параметры, и как правило не меняет.
А куда ему деваться, если основной выразительный механизм в Си — это функции, которым передаются указатели на структуры, с котороми они что-то делают?
A>Поэтому с моей точки зрения нужно маркировать не константные аргументы, а изменяемые аргументы. A>Таким образом в правильно написанной программе хлама не будет.
Ну в принципе, да. Лучше иметь константность по умолчанию и явно задаваемый признак того, что переменная может меняться. Но это — очень радикальное измненение по сравнению с Си. В Rust, не отягощенном совместимостью с Си, вроде так и сделано
A>А сейчас хлама столько же, сколько полезной информации или даже больше. A>Это не правильно.
Раздражает микс, когда в проекте имеется полно функций, параметры которых по сути константные, но таковыми не размечены.
A>Другой маразм, который никто не знает, и который любят спрашивать на собеседованиях - A>в зависимости от положения слова const может быть константный адрес или константное содержимое адреса.
На собеседованиях любят спрашивать всякую фигню.
У Си есть неочевидные нюансы, но никто в своём уме не будет использовать их в боевом коде.
Мой любимый пример: x = (flag ? sin : cos)(y); Опыт показывает, что эта простая конструкция приводит многих собеседователей в тупик, в диапазоне от "а что это значит?" и до "а что, так можно?".