Перейти к содержанию
    

см. выше - попытка возвыситься над толпой за счет использования законно разрешенных "сверх"возможностей Си показывает наличие каких-то комплексов...
Вот это вы какую-то ерунду написали. Вполне нормальный, читабельный и рабочий код. Не надо обзываться, если он для вас непивычен. Также для многих непривычен тернарный оператор A ? B : C; но это не повод требовать его запрета. В некоторых случаях он просто незаменим, а во многих других исключительно удобен. Когда понимаешь. А когда не понимаешь - любой код кажется диким.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если массив задан a[5], то 5[a] выходит за его границы. Удивляюсь, как оно работает (в смысле 4[a] и т.п.). И зачем? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...
    printf("\x1b[1D%c", "|/-\\|/-\\"[++idx & 0x3]);

 

Зачем повторения в массиве? А может тогда уж короче:

    printf("\x1b[1D%c", "|/-\\"[++idx & 0x2]);

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Зачем повторения в массиве? А может тогда уж короче:

Только оставить & 0x3, ограничиваться двумя младшими битами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я прошу всех, высказывающихся против моей точки зрения, привести аргументы ПОЛЕЗНОСТИ всех этих "непривычных" способов записи и т.п. штук, которые ДОПУСТИМЫ синтаксисом языка. только прошу аргументы более существенные, нежели "рабочий код", "короткий вариант записи" и т.п. я готов принять вариант "по-другому невозможно".

 

по поводу резкости высказывания про "комплексы". я просто очень сильно подозреваю, что в момент разработки языка авторами владела эйфория "сдлать супер-пупер", и они ввели все эти нюансики, смысл которых на практике отсутствует, и, кроме повода некоторым показать свои знания, никакой иной пользы не приносит. поэтому я думаю, что надо потихоньку забывать то, что не является НЕОБХОДИМЫМ, ибо язык программирования - это не способ самовыражения, а инструмент для работы. а инструмент красив своей лаконичностью, а не рюшечками.

 

извините, что не следую общепринятым догмам. это как раз из-за привычки думать и осмысливать суть. просто единственная возможная для меня оценка существующей реальности - излишество. и я об этом говорю открыто.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Зачем повторения в массиве? А может тогда уж короче:

    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] дает одинаковый результат.

 

Вопрос "зачем" здесь не логичен. Правильнее спрашивать - "почему". Понятно, что Кениган и Ритчи не говорили "а давай мы здесь впиндюрим такую фичу". Нет, но они говорили - смотри как изящно можно реализовать оператор квадратные скобки". И то, что теперь на Си конечный (машинный) код получается гораздо лучше, чем большинство могут написать на Ассемблере - заслуга изящества Си

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

аргументы ПОЛЕЗНОСТИ всех этих "непривычных" способов записи и т.п. штук, которые ДОПУСТИМЫ синтаксисом языка. только прошу аргументы более существенные, нежели "рабочий код", "короткий вариант записи" и т.п. я готов принять вариант "по-другому невозможно".
Просите аргументы полезности, но готовы принять лишь аргументы необходимости. "рабочий код" и "короткий вариант записи" вместе дают лаконичность записи, а значит упрощают сопровождение. Если вам это не нравится или ваш уровень владения С пока недостаточен - никто не заставляет вас использовать эти приемы. Но и махать шашкой на остальных тоже не нужно. Поверьте, все люди разные и кому-то это действительно удобно именно из-за лаконичности.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только оставить & 0x3, ограничиваться двумя младшими битами.

Конечно! Немного невниматеьности с моей стороны, увы :01:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все мы консервативны и держимся за свои привычки. Интересно наблюдать за человеком, который первый раз видит двойной восклицательный знак:

int a, b;
a = 27;
b = !!a;

Многие сначала офигевают, и спорят, что это невозможно понять. А через время смотришь - сами так писать начинают. Привыкли.

 

Кстати, я проверял скомпилированный код для трех случаев:

b = !!a;
b = a ? 1 : 0;
if (a)
    b = 1;
else
    b = 0;

Во всех трех случаях gcc дает одинаковый результат.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Понятно, что Кениган и Ритчи не говорили "а давай мы здесь впиндюрим такую фичу". Нет, но они говорили - смотри как изящно можно реализовать оператор квадратные скобки". И то, что теперь на Си конечный (машинный) код получается гораздо лучше, чем большинство могут написать на Ассемблере - заслуга изящества Си
в вашей трактовке слово "изящно" звучит неприкрыто по-гламурному: "смотри, какую изящную сумочку я вчера купила".

 

обилие НЕНУЖНЫХ вариаций одного и того же я лично не могу назвать изящностью. бОльшую часть своей жизни я писал на паскале, и при знакомстве с Си был неприятно поражен его синтаксисом. однако, со временем я признал плюсы Сишной лаконичности, и теперь паскаль кажется несколько громоздким - но не более! убрать громоздкость записи - это плюс, хотя за счет того, что едва ли не каждый символ имеет массу смыслов в зависимости от местоположения в строке. например, звездочка или амперсенд. по-моему, в этом случае с краткостью Керниган перебрал малёхо.

 

 

или способ чтения описания типа переменной. где логика?! если 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

первая запись многим непонятна - даже автор этого примера сам об этом сказал, это факт. далеко не в каждой книжке по программированию на Си найдешь объяснение этого примера.

вторая запись более проста, и в любой книжке есть подобный пример.

следовательно, первый способ более элитный, доступный более узкому кругу "профессионалов", а второй - всем подряд. и, чтобы подтвержить свой профессионализм, т.е. выделться из серой массы, профессионал использует первую запись. но из приличия мотивирует это лаконичностью или еще чем-то, практическая польза чего столь же туманна.

только этот способ позволяет порой профессионалу поучить новичка - сокровенными знаниями.

таким образом, я прихожу к выводу, что кроме "выпендрежа", нет никаких иных мотивов использовать не совсем привычные конструкции, которые тем не менее допустимы синтаксисом. дело не в Си, дело впсихологии :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

но ЗАЧЕМ?!?!?! это МОЖНО, но СОВЕРШНЕННО НЕ НУЖНО делать!!!

 

разве я не прав?

Не прав. Вы ведь используете в своей речи деепричастные обороты, хотя вполне можно строить предложения и без них и вообще обходиться словарным запасом людоедки Эллочки.

хотелось бы найти такого челоека, кому запись типа 5[а] на самом деле помогает добиться какого-то положительного результата
Уже две страницы перед вами висит пример igorle, но вы отказываетесь его видеть. Вот вам еще один, аналогичный:

inline char to_hex(uint8_t tetrade) { return "0123456789ABCDEF"[tetrade & 0x0F]; }

Перепишите его в удобном для вас виде и докажите нам преимущества своего варианта.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да, конечно, этот вариант самый короткий. но с моей точки зрения даже рабочая секунда Билла Гейтса не стоит того, чтобы экономить ее на более "спокойной" записи a = b ? 1 : 0;

 

Все эти знания важны, чтобы во время программирования думать не о языке, а об алгоритме. Для этого надо говорить на языке свободно, а не со словарем. Тогда не будешь зависать над вопросами - чему равно (-3)%10

 

Чтобы лучше понять друг друга, попрошу Вас написать несколько строк кода.

 

Есть три переменны типа int - a,b,c;

В языке Си есть логические И и Или (&& ||), но нет логического XOR. Вам потребовалось сделать так, чтобы "с" была ксором от a и b.

Как вы это напишите в Вашем проекте?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Перепишите его в удобном для вас виде и докажите нам преимущества своего варианта.

думаю, нет смысла переписывать :) мой вариант будет просто понятен всем без исключения, в нем не будет изюминки, только и всего. но для вас, как я понимаю, это не аргумент :)

любопытно было бы тем не менее получить ответ, чего достиг автор этого примера, кроме того, что создал небольшое затруднения для восприятия некоторым не очень опытным программистам, а так же установил жесткую привязку длины строки к магическому числу, т.е. сделал код менее универсальным?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

мой вариант будет просто понятен всем без исключения
Мой непосредственный начальник не знает языков программирования. Он специалист по радосвязи. Думаю ему будет непонятен. Вот ведь конфуз - какой бы ни был простой код, для его понимания все равно нужны какие-то знания.

 

кроме того, что создал небольшое затруднения для восприятия некоторым не очень опытным программистам
Он уменьшил свое время на разбор этого куска кода в дальнейшем, в процессе сопровождения проекта. Эта конструкция охватывается взглядом целиком и моментально анализируется. А "некоторых не очень опытных" заставит при встрече с этим кодом пополнить свои знания и стать чуть более опытными.

 

, а так же установил жесткую привязку длины строки к магическому числу, т.е. сделал код менее универсальным?
Простите, это вы о чем?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вам потребовалось сделать так, чтобы "с" была ксором от a и b.

Как вы это напишите в Вашем проекте?

разумеется, напишу не так "лаконично", как вы. но в чем я проиграю при этом, и в чем выиграете вы? вряд ли стоит учитывать время, потребное на написание кода или износ клаватуры...

 

возможно, я ваш код пойму с третьей минуты размышлений, а вы мой - с первой секунды, так чей же код будет лучше по критерию понимания? неужели ваша цель в том и состоит, чтобы таким, как я, осложнить жизнь? ;)

 

уверен, что после компиляции у нас обоих получится одно и то же в машинных кодах :)

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...