Сергей Борщ 134 20 марта, 2013 Опубликовано 20 марта, 2013 · Жалоба см. выше - попытка возвыситься над толпой за счет использования законно разрешенных "сверх"возможностей Си показывает наличие каких-то комплексов...Вот это вы какую-то ерунду написали. Вполне нормальный, читабельный и рабочий код. Не надо обзываться, если он для вас непивычен. Также для многих непривычен тернарный оператор A ? B : C; но это не повод требовать его запрета. В некоторых случаях он просто незаменим, а во многих других исключительно удобен. Когда понимаешь. А когда не понимаешь - любой код кажется диким. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 20 марта, 2013 Опубликовано 20 марта, 2013 · Жалоба Если массив задан a[5], то 5[a] выходит за его границы. Удивляюсь, как оно работает (в смысле 4[a] и т.п.). И зачем? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 20 марта, 2013 Опубликовано 20 марта, 2013 · Жалоба ... printf("\x1b[1D%c", "|/-\\|/-\\"[++idx & 0x3]); Зачем повторения в массиве? А может тогда уж короче: printf("\x1b[1D%c", "|/-\\"[++idx & 0x2]); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 20 марта, 2013 Опубликовано 20 марта, 2013 · Жалоба Зачем повторения в массиве? А может тогда уж короче: Только оставить & 0x3, ограничиваться двумя младшими битами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 1 20 марта, 2013 Опубликовано 20 марта, 2013 · Жалоба я прошу всех, высказывающихся против моей точки зрения, привести аргументы ПОЛЕЗНОСТИ всех этих "непривычных" способов записи и т.п. штук, которые ДОПУСТИМЫ синтаксисом языка. только прошу аргументы более существенные, нежели "рабочий код", "короткий вариант записи" и т.п. я готов принять вариант "по-другому невозможно". по поводу резкости высказывания про "комплексы". я просто очень сильно подозреваю, что в момент разработки языка авторами владела эйфория "сдлать супер-пупер", и они ввели все эти нюансики, смысл которых на практике отсутствует, и, кроме повода некоторым показать свои знания, никакой иной пользы не приносит. поэтому я думаю, что надо потихоньку забывать то, что не является НЕОБХОДИМЫМ, ибо язык программирования - это не способ самовыражения, а инструмент для работы. а инструмент красив своей лаконичностью, а не рюшечками. извините, что не следую общепринятым догмам. это как раз из-за привычки думать и осмысливать суть. просто единственная возможная для меня оценка существующей реальности - излишество. и я об этом говорю открыто. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
igorle 0 20 марта, 2013 Опубликовано 20 марта, 2013 · Жалоба Зачем повторения в массиве? А может тогда уж короче: printf("\x1b[1D%c", "|/-\\"[++idx & 0x2]); Да, это я сглупил. Дважды. Объявил восемь символов, а использовал только 4 (маска 0x3). Я хотел написать вот так: printf("\x1b[1D%c", "|/-\\|/-\\"[++idx & 0x7]); Но следовало так, как Вы говорите: printf("\x1b[1D%c", "|/-\\"[++idx & 0x3]); Если массив задан a[5], то 5[a] выходит за его границы. Удивляюсь, как оно работает (в смысле 4[a] и т.п.). И зачем? Массив не задан a[5]. Массив задан, например, a[10]. Здесь демонстрировалось, что a[5] и 5[a] дает одинаковый результат. Вопрос "зачем" здесь не логичен. Правильнее спрашивать - "почему". Понятно, что Кениган и Ритчи не говорили "а давай мы здесь впиндюрим такую фичу". Нет, но они говорили - смотри как изящно можно реализовать оператор квадратные скобки". И то, что теперь на Си конечный (машинный) код получается гораздо лучше, чем большинство могут написать на Ассемблере - заслуга изящества Си Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 20 марта, 2013 Опубликовано 20 марта, 2013 · Жалоба аргументы ПОЛЕЗНОСТИ всех этих "непривычных" способов записи и т.п. штук, которые ДОПУСТИМЫ синтаксисом языка. только прошу аргументы более существенные, нежели "рабочий код", "короткий вариант записи" и т.п. я готов принять вариант "по-другому невозможно".Просите аргументы полезности, но готовы принять лишь аргументы необходимости. "рабочий код" и "короткий вариант записи" вместе дают лаконичность записи, а значит упрощают сопровождение. Если вам это не нравится или ваш уровень владения С пока недостаточен - никто не заставляет вас использовать эти приемы. Но и махать шашкой на остальных тоже не нужно. Поверьте, все люди разные и кому-то это действительно удобно именно из-за лаконичности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 20 марта, 2013 Опубликовано 20 марта, 2013 · Жалоба Только оставить & 0x3, ограничиваться двумя младшими битами. Конечно! Немного невниматеьности с моей стороны, увы :01: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
igorle 0 20 марта, 2013 Опубликовано 20 марта, 2013 · Жалоба Все мы консервативны и держимся за свои привычки. Интересно наблюдать за человеком, который первый раз видит двойной восклицательный знак: int a, b; a = 27; b = !!a; Многие сначала офигевают, и спорят, что это невозможно понять. А через время смотришь - сами так писать начинают. Привыкли. Кстати, я проверял скомпилированный код для трех случаев: b = !!a; b = a ? 1 : 0; if (a) b = 1; else b = 0; Во всех трех случаях gcc дает одинаковый результат. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 1 20 марта, 2013 Опубликовано 20 марта, 2013 · Жалоба Понятно, что Кениган и Ритчи не говорили "а давай мы здесь впиндюрим такую фичу". Нет, но они говорили - смотри как изящно можно реализовать оператор квадратные скобки". И то, что теперь на Си конечный (машинный) код получается гораздо лучше, чем большинство могут написать на Ассемблере - заслуга изящества Сив вашей трактовке слово "изящно" звучит неприкрыто по-гламурному: "смотри, какую изящную сумочку я вчера купила". обилие НЕНУЖНЫХ вариаций одного и того же я лично не могу назвать изящностью. бОльшую часть своей жизни я писал на паскале, и при знакомстве с Си был неприятно поражен его синтаксисом. однако, со временем я признал плюсы Сишной лаконичности, и теперь паскаль кажется несколько громоздким - но не более! убрать громоздкость записи - это плюс, хотя за счет того, что едва ли не каждый символ имеет массу смыслов в зависимости от местоположения в строке. например, звездочка или амперсенд. по-моему, в этом случае с краткостью Керниган перебрал малёхо. или способ чтения описания типа переменной. где логика?! если int i вопросов не вызывает (слева направо читаем и смысл понятен), то int (*ptr)(void) уже не так - слева направо не прокатывает, ибо начинать надо с середины и затем читать слева направо с перескоком через середину... почему?! возможно, когда-то это казалось красивым, но красота в логике, а порядок чтения записей на данном примере нелогичен. мне кажется, все мы знаем русский язык в ПОЛНОМ его объеме, втом числе с матерными идиомами. однако, большинство из нас придерживается правила неиспользования этих слов в своей речи, во всяком случае здесь, на форуме, т.е. публично. никто же не призывает обучать детей русскому языку вместе с матами! я сторонник того, что рассказывать о 5[a] - это что-то из той же оперы: да, есть такая загогулина в Си, но приличные программисты ее не используют и уж тем более новичкам о ней не рассказывают. кому станет хуже от этого подхода? разумеется, можно описать указатель на функцию с тремя параметрами, каждый из которых является указателем на функцию с тремя параметрами, каждый из которых.... (и так далее) в виде одной строки (кстати, уважаемые сторонники изящества Си - сумеете ли вы с первой попытки это изобразить?), но ЗАЧЕМ?!?!?! это МОЖНО, но СОВЕРШНЕННО НЕ НУЖНО делать!!! разве я не прав? P.S. встречал извращение из области джавы: оказывается, можно едва ли не любую программу написать без использования цифр и букв, и что-то типа +!![] будет "корректно исполняемым кодом джава" вот статья. встречал аналогичное и из области Си: создаются дефайны, и в итоге программа превращается в такое: давай печатай бля про мир (это для вывода хелловорда) - но разве это имеет отношение к программированию?! Просите аргументы полезности, но готовы принять лишь аргументы необходимости. "рабочий код" и "короткий вариант записи" вместе дают лаконичность записи, а значит упрощают сопровождение. Если вам это не нравится или ваш уровень владения С пока недостаточен - никто не заставляет вас использовать эти приемы. Но и махать шашкой на остальных тоже не нужно. Поверьте, все люди разные и кому-то это действительно удобно именно из-за лаконичности.хотелось бы найти такого челоека, кому запись типа 5[а] на самом деле помогает добиться какого-то положительного результата - о чем я и обращаюсь ко всем апоголетам "лаконичности". по-моему, знания затмили для вас истину :) помните о бритве Оккама? не плоди сущности без необходимости! Все мы консервативны и держимся за свои привычки. Интересно наблюдать за человеком, который первый раз видит двойной восклицательный знак: int a, b; a = 27; b = !!a; Многие сначала офигевают, и спорят, что это невозможно понять. А через время смотришь - сами так писать начинают. Привыкли. да, конечно, этот вариант самый короткий. но с моей точки зрения даже рабочая секунда Билла Гейтса не стоит того, чтобы экономить ее на более "спокойной" записи a = b ? 1 : 0; кстати, вы УВЕРЕНЫ, что результат !0 будет ОБЯЗАТЕЛЬНО 1 ВСЕГДА ? в Си есть ряд вещей, на которые никогда нельзя положиться, например, размерность int или знаковость char... я дословно стандарт не помню - написано там про это? я уже когда-то говорил, но повторю и теперь. сравним a = !!b и a = b ? 1 : 0 первая запись многим непонятна - даже автор этого примера сам об этом сказал, это факт. далеко не в каждой книжке по программированию на Си найдешь объяснение этого примера. вторая запись более проста, и в любой книжке есть подобный пример. следовательно, первый способ более элитный, доступный более узкому кругу "профессионалов", а второй - всем подряд. и, чтобы подтвержить свой профессионализм, т.е. выделться из серой массы, профессионал использует первую запись. но из приличия мотивирует это лаконичностью или еще чем-то, практическая польза чего столь же туманна. только этот способ позволяет порой профессионалу поучить новичка - сокровенными знаниями. таким образом, я прихожу к выводу, что кроме "выпендрежа", нет никаких иных мотивов использовать не совсем привычные конструкции, которые тем не менее допустимы синтаксисом. дело не в Си, дело впсихологии :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 20 марта, 2013 Опубликовано 20 марта, 2013 · Жалоба но ЗАЧЕМ?!?!?! это МОЖНО, но СОВЕРШНЕННО НЕ НУЖНО делать!!! разве я не прав? Не прав. Вы ведь используете в своей речи деепричастные обороты, хотя вполне можно строить предложения и без них и вообще обходиться словарным запасом людоедки Эллочки. хотелось бы найти такого челоека, кому запись типа 5[а] на самом деле помогает добиться какого-то положительного результатаУже две страницы перед вами висит пример igorle, но вы отказываетесь его видеть. Вот вам еще один, аналогичный: inline char to_hex(uint8_t tetrade) { return "0123456789ABCDEF"[tetrade & 0x0F]; } Перепишите его в удобном для вас виде и докажите нам преимущества своего варианта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
igorle 0 20 марта, 2013 Опубликовано 20 марта, 2013 · Жалоба да, конечно, этот вариант самый короткий. но с моей точки зрения даже рабочая секунда Билла Гейтса не стоит того, чтобы экономить ее на более "спокойной" записи a = b ? 1 : 0; Все эти знания важны, чтобы во время программирования думать не о языке, а об алгоритме. Для этого надо говорить на языке свободно, а не со словарем. Тогда не будешь зависать над вопросами - чему равно (-3)%10 Чтобы лучше понять друг друга, попрошу Вас написать несколько строк кода. Есть три переменны типа int - a,b,c; В языке Си есть логические И и Или (&& ||), но нет логического XOR. Вам потребовалось сделать так, чтобы "с" была ксором от a и b. Как вы это напишите в Вашем проекте? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 1 20 марта, 2013 Опубликовано 20 марта, 2013 · Жалоба Перепишите его в удобном для вас виде и докажите нам преимущества своего варианта. думаю, нет смысла переписывать :) мой вариант будет просто понятен всем без исключения, в нем не будет изюминки, только и всего. но для вас, как я понимаю, это не аргумент :) любопытно было бы тем не менее получить ответ, чего достиг автор этого примера, кроме того, что создал небольшое затруднения для восприятия некоторым не очень опытным программистам, а так же установил жесткую привязку длины строки к магическому числу, т.е. сделал код менее универсальным? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 20 марта, 2013 Опубликовано 20 марта, 2013 · Жалоба мой вариант будет просто понятен всем без исключения Мой непосредственный начальник не знает языков программирования. Он специалист по радосвязи. Думаю ему будет непонятен. Вот ведь конфуз - какой бы ни был простой код, для его понимания все равно нужны какие-то знания. кроме того, что создал небольшое затруднения для восприятия некоторым не очень опытным программистамОн уменьшил свое время на разбор этого куска кода в дальнейшем, в процессе сопровождения проекта. Эта конструкция охватывается взглядом целиком и моментально анализируется. А "некоторых не очень опытных" заставит при встрече с этим кодом пополнить свои знания и стать чуть более опытными. , а так же установил жесткую привязку длины строки к магическому числу, т.е. сделал код менее универсальным?Простите, это вы о чем? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 1 20 марта, 2013 Опубликовано 20 марта, 2013 · Жалоба Вам потребовалось сделать так, чтобы "с" была ксором от a и b. Как вы это напишите в Вашем проекте? разумеется, напишу не так "лаконично", как вы. но в чем я проиграю при этом, и в чем выиграете вы? вряд ли стоит учитывать время, потребное на написание кода или износ клаватуры... возможно, я ваш код пойму с третьей минуты размышлений, а вы мой - с первой секунды, так чей же код будет лучше по критерию понимания? неужели ваша цель в том и состоит, чтобы таким, как я, осложнить жизнь? ;) уверен, что после компиляции у нас обоих получится одно и то же в машинных кодах :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться