Цитата(igorle @ Mar 20 2013, 16:19)

Понятно, что Кениган и Ритчи не говорили "а давай мы здесь впиндюрим такую фичу". Нет, но они говорили - смотри как изящно можно реализовать оператор квадратные скобки". И то, что теперь на Си конечный (машинный) код получается гораздо лучше, чем большинство могут написать на Ассемблере - заслуга изящества Си
в вашей трактовке слово "изящно" звучит неприкрыто по-гламурному: "смотри, какую изящную сумочку я вчера купила".
обилие НЕНУЖНЫХ вариаций одного и того же я лично не могу назвать изящностью. бОльшую часть своей жизни я писал на паскале, и при знакомстве с Си был неприятно поражен его синтаксисом. однако, со временем я признал плюсы Сишной лаконичности, и теперь паскаль кажется несколько громоздким - но не более! убрать громоздкость записи - это плюс, хотя за счет того, что едва ли не каждый символ имеет массу смыслов в зависимости от местоположения в строке. например, звездочка или амперсенд. по-моему, в этом случае с краткостью Керниган перебрал малёхо.
или способ чтения описания типа переменной. где логика?! если int i вопросов не вызывает (слева направо читаем и смысл понятен), то int (*ptr)(void) уже не так - слева направо не прокатывает, ибо начинать надо с середины и затем читать слева направо с перескоком через середину... почему?! возможно, когда-то это казалось красивым, но красота в логике, а порядок чтения записей на данном примере нелогичен.
мне кажется, все мы знаем русский язык в ПОЛНОМ его объеме, втом числе с матерными идиомами. однако, большинство из нас придерживается правила неиспользования этих слов в своей речи, во всяком случае здесь, на форуме, т.е. публично. никто же не призывает обучать детей русскому языку вместе с матами! я сторонник того, что рассказывать о 5[a] - это что-то из той же оперы: да, есть такая загогулина в Си, но приличные программисты ее не используют и уж тем более новичкам о ней не рассказывают. кому станет хуже от этого подхода? разумеется, можно описать указатель на функцию с тремя параметрами, каждый из которых является указателем на функцию с тремя параметрами, каждый из которых.... (и так далее) в виде одной строки (кстати, уважаемые сторонники изящества Си - сумеете ли вы с первой попытки это изобразить?), но ЗАЧЕМ?!?!?! это МОЖНО, но СОВЕРШНЕННО НЕ НУЖНО делать!!!
разве я не прав?
P.S. встречал извращение из области джавы: оказывается, можно едва ли не любую программу написать без использования цифр и букв, и что-то типа
+!![] будет "корректно исполняемым кодом джава"
вот статья. встречал аналогичное и из области Си: создаются дефайны, и в итоге программа превращается в такое: давай печатай бля про мир (это для вывода хелловорда) - но разве это имеет отношение к программированию?!
Цитата(Сергей Борщ @ Mar 20 2013, 16:21)

Просите аргументы полезности, но готовы принять лишь аргументы необходимости. "рабочий код" и "короткий вариант записи" вместе дают лаконичность записи, а значит упрощают сопровождение. Если вам это не нравится или ваш уровень владения С пока недостаточен - никто не заставляет вас использовать эти приемы. Но и махать шашкой на остальных тоже не нужно. Поверьте, все люди разные и кому-то это действительно удобно именно из-за лаконичности.
хотелось бы найти такого челоека, кому запись типа 5[а] на самом деле помогает добиться какого-то положительного результата - о чем я и обращаюсь ко всем апоголетам "лаконичности". по-моему, знания затмили для вас истину

помните о бритве Оккама? не плоди сущности без необходимости!
Цитата(igorle @ Mar 20 2013, 16:31)

Все мы консервативны и держимся за свои привычки. Интересно наблюдать за человеком, который первый раз видит двойной восклицательный знак:
Код
int a, b;
a = 27;
b = !!a;
Многие сначала офигевают, и спорят, что это невозможно понять. А через время смотришь - сами так писать начинают. Привыкли.
да, конечно, этот вариант самый короткий. но с моей точки зрения даже рабочая секунда Билла Гейтса не стоит того, чтобы экономить ее на более "спокойной" записи a = b ? 1 : 0;
кстати, вы УВЕРЕНЫ, что результат
!0 будет ОБЯЗАТЕЛЬНО
1 ВСЕГДА ? в Си есть ряд вещей, на которые никогда нельзя положиться, например, размерность int или знаковость char... я дословно стандарт не помню - написано там про это?
я уже когда-то говорил, но повторю и теперь.
сравним a = !!b и a = b ? 1 : 0
первая запись многим непонятна - даже автор этого примера сам об этом сказал, это факт. далеко не в каждой книжке по программированию на Си найдешь объяснение этого примера.
вторая запись более проста, и в любой книжке есть подобный пример.
следовательно, первый способ более элитный, доступный более узкому кругу "профессионалов", а второй - всем подряд. и, чтобы подтвержить свой профессионализм, т.е. выделться из серой массы, профессионал использует первую запись. но из приличия мотивирует это лаконичностью или еще чем-то, практическая польза чего столь же туманна.
только этот способ позволяет порой профессионалу поучить новичка - сокровенными знаниями.
таким образом, я прихожу к выводу, что кроме "выпендрежа", нет никаких иных мотивов использовать не совсем привычные конструкции, которые тем не менее допустимы синтаксисом. дело не в Си, дело впсихологии