ARV 1 25 марта, 2013 Опубликовано 25 марта, 2013 · Жалоба В данном конкретном вопросе (!! vs !) я не нахожу причин, почему igorle отказывается использовать одиночные !, кроме, как привычки.видимо, он вместо if(a) использует if(!!a). тогда понятно, почему !! вместо ! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 25 марта, 2013 Опубликовано 25 марта, 2013 · Жалоба Читал две книжки, не считая каких-то еще при социализме изданных - K&R и Шилдта. Ни там, ни там такого 5[a] не написано. Наверное, не без причин. надо у Страуструпа посмотреть, но тоже не помню такого Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 1 25 марта, 2013 Опубликовано 25 марта, 2013 · Жалоба Раньше я даже в ... нетрезвом виде не допускал, что такое возможно. Не знал.все мы в определенный момент что-то новое узнаем. просто один в восторге от того, что новое знание не укладывается в его голове, а другой в ужасе. это как знание уязвимых точек человеческого тела: обязательно найдется кто-то, кто в первую очередь кого-то покалечит после знакомства с ними...все приведенные здесь примеры многократно описаны в литературе, так что никто из здешних авторитетов америки не открыл. просто эти знания редко-редко кому на самом деле помогают, и потому редко-редко кто о них помнит. но порой блеснуть ими перед новичком очень к месту. вместо того, чтобы научить новичка думать, учат следовать готовым шаблонным решениям. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 25 марта, 2013 Опубликовано 25 марта, 2013 · Жалоба все мы в определенный момент что-то новое узнаем. просто один в восторге от того, что новое знание не укладывается в его голове, а другой в ужасе. это как знание уязвимых точек человеческого тела: обязательно найдется кто-то, кто в первую очередь кого-то покалечит после знакомства с ними...все приведенные здесь примеры многократно описаны в литературе, так что никто из здешних авторитетов америки не открыл. просто эти знания редко-редко кому на самом деле помогают, и потому редко-редко кто о них помнит. но порой блеснуть ими перед новичком очень к месту. вместо того, чтобы научить новичка думать, учат следовать готовым шаблонным решениям. Мне кажется, что всю эту цитату мог бы сказать и igorle. :beer: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 1 25 марта, 2013 Опубликовано 25 марта, 2013 · Жалоба Мне кажется, что всю эту цитату мог бы сказать и igorle. :beer: а он и сказал, только по-своему. когда упомянул, что ! его заставляет задуматься. т.е. первый посыл у нас был одинаков, но вот направления дальнейшего мышления - разный. его потянуло в область, как подогнать под стандарт то, что вызывает сомнения, а я сразу сказал, что это НЕ ЛОГИЧНО, и просто не стал подгонять, а стал об этом говорить другим. не логично называть результат арифметического выражения логическим, не логично превращать его всякими шаманскими средствами в логическое, нелогично смешивать арифметику с логикой... но есть лазейка: стандарт позволяет, и логика сразу отключается (извините за тавталогию). никто ведь даже не видит этой НЕЛОГИЧНОСТИ, как я ни пытался ее показать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
igorle 0 25 марта, 2013 Опубликовано 25 марта, 2013 · Жалоба Я искренне рад, что неожиданно вспыхнувший флейм закончился впорлне миролюбиво, и позволил всем участникам (в том числе и мне) расширить как диапазон познаний, так и диапазон терпимости. Может быть вообще закрыть эту тему? От греха подальше. Слишком общая она. "Весь Си в одном флаконе" Инверсию означает ~, а ! означает логическое отрицание (НЕ), и он тоже превращает в булеву форму. Да, конечно отрицание, а не инверсию. Как уже говорили - скомпилированный код будет одинаковый. А ставить один или два восклицательных знака - дело привычки. Не более того. Как я уже говорил - для меня !! означает кастинг к булевому типу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 25 марта, 2013 Опубликовано 25 марта, 2013 · Жалоба Я вот что хочу сказать. Если общий проект написан в стиле !!, то и придерживаться нужно подобного стиля. Если в стиле "понятный", то в таком Знать возможности и применять их - это только на усмотрение в конкретной ситуации igorle, не мы начинали тему, но все уже 16 листов читать познавательно. Зачем закрывать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 6 25 марта, 2013 Опубликовано 25 марта, 2013 · Жалоба А вообще приём с двойным восклицательным знаком красивый. Возьму, пожалуй, на вооружение. Как идиому. Напомнил мне, по аналогии, одно схемотехническое ухищрение, тоже нестандартное: выделение модуля сигнала посредством одностороннего насыщения усилителя за счёт однополярности питания. :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 26 марта, 2013 Опубликовано 26 марта, 2013 · Жалоба Попробовать - можно. Делать - не стоит. Операция "остаток от деления" очень тяжелая. Для расширения кругозора можно сделать вот так: с=(!a + !b) & 0x1; А кто сказал что будет применена операция остаток от деления? Любой компилятор последних 3ёх-5и лет преобразует операцию с целыми неотрицательными числами X % N^2 к X & (N^2 - 1) И это всем давно известно и используется абсолютно обыденно. Ведь вижу запись, выглядящую абсурдно. Вот Вы тоже: прочтите её вслух, а затем тоже сделайте выводы. Не смешно? Только честно.Абсолютно честно никакого абсурда. Вижу идею: приведение целых к булу (пусть и с инверсией - не важно) и последующее исключающее или двух целых. Очень лаконично и красиво. Повторюсь - никакого абсурда. Почему вы сначала изучали законы Кирхгофа, а только потом приступили к схемотехнике? А тут позволяете себе не зная стандарта (читай законов Кирхгофа) давать Коментарии подобного рода? Вот в этом я вижу абсурд. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 1 26 марта, 2013 Опубликовано 26 марта, 2013 · Жалоба Абсолютно честно никакого абсурда. Вижу идею: приведение целых к булу (пусть и с инверсией - не важно) и последующее исключающее или двух целых. Очень лаконично и красиво. Никакого абсурда. Почему вы сначала изучали законы Киргофа, а только потом приступили к схемотехнике? А тут позволяете себе не зная стандарта (читай законов Киргофа) давать Коментарии подобного рода? потому что еще раньше изучили математику (одну из основополагающих наук, программирование даже не втоично по отношению к ней), в которой коров приводить к километрам никак невозможно. и именно в том и абсурд, что стандарт устанавливает разрешение приведения множества чисел к единственному числу. Законы Кирхгофа основаны на законах математики (и физики) и выводятся строго на логической базе этих наук, поэтому эти законы выглядят красиво, логично и спорить с ними бесполезно. а стандарт, родившийся просто из головы человека, может быть оспариваем. хотя бы частично. это не закон природы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 26 марта, 2013 Опубликовано 26 марта, 2013 · Жалоба это не закон природы.Вам уже давно пора уняться и перейти от законов природы к законам Божьим.... Возможно будет гораздо больше пользы... Мы сейчас программируем на Си. У этого языка есть правила и законы (стандарт). О чём ещё можно говорить??? Напишите свой собственный язык и только тогда втирайте очки окружающим! потому что еще раньше изучили математикуА ещё раньше ходить на горшок! И что? Мои дети закончили этот этап. Повторюсь, есть стандарт - его утверждал и редактировал не один и не 2 и даже не 10 человек. А тут появился пуп земли и ему не нравится. Не нравится - не ешь! Или вы настолько умны, что считаете себе возможным давать рекомендации - читай изобретать новый стандарт поверх имеющегося? Я поражён вашим тупым упорством. Вы ничего не можете изменить в сложившейся ситуации и учиться вам тоже видимо лень. Вам остаётся одно - идти в депутаты и с высокой арены поливать потоком мутного сознания окружающих. Прощайте! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 1 26 марта, 2013 Опубликовано 26 марта, 2013 · Жалоба Прощайте!неужели я вас довел до суицида?! :rolleyes: я не опровергаю стандарты, даже не призываю их пересматривать. это вы усматриваете в моих словах посягательство на святое. я ратую за приведение программ в соответствие со здравым смыслом без противоречий со стадартом. что в этом не так? или важнее именно отсутствие здравого смысла в коде? :bb-offtopic: а если помечтать: вот стал я депутатом какого-нибудь европарламента и добился пересмотра стандарта Си. уже на следующий день вы станете с не меньшим упорством перекрещивть какого-нибудь igorle в новую веру? ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 26 марта, 2013 Опубликовано 26 марта, 2013 · Жалоба XVR, вы, пожалуйста, сообщите ВЕСЬ размер кода, потому как даже под WinAVR в моем варианте ассемблерный листинг функций давал ВАШ результат, а вот общий размер, который включает в том числе подготовительные действия по вызову функций, оказался совсем иным.А вот это странно. Если меняется только вызов, то разницы в размере вообще быть не должно, т.к. соглашения о вызовах функций не зависит от их содержимого. Сделал main с вызовом var1/var2 в отдельном файле: typedef char boo; boo var1(boo x, boo y); boo var2(boo x, boo y); int main() { return var1(1,2); } Результат - размер exe 9114 байт вне зависимости от вызываемой функции. (gcc 4.7.2) Разрезание функций var1 и var2 на 1 разных файла и линковка только с одним из них (что бы неиспользуемая функция вообще не попала в выход) дала - по 1му варианту (с && и ||) -9037 байт, по второму ( ^ ) - 9006 Помещение всех функций в один файл и добавление static к var1/var2 дала 8876 для обоих вариантов. Ассемблер последнего случая - main: .LFB2: .cfi_startproc xorl %eax, %eax ret .cfi_endproc т.е. компилятор вообще все выкинул :rolleyes: потому как даже под WinAVR в моем варианте ассемблерный листинг функций давал ВАШ результат,А вот это непонятно, почему тогда конечный результат получился прямо противоположный? который включает в том числе подготовительные действия по вызову функций,У функций одинаковый прототип, почему тогда отличаются 'подготовительные действия по вызову функций'? что касается взгляда на логику, то по-моему, двух мнений тут быть не может: операция ^ арифметическая битовая, операция ! -логическая. в одном выражении смешаны два вида операций.Еще раз, медленно и печально - в С НЕТ РАЗЛИЧИЯ между логическими и арифметическими операциями. И чем быстрее вы (или кто угодно) к этому привыкнет, тем будет лучше. мой вариант как раз и отражает суть булевой алгебры преобразования логических функций - помните это? в моем варианте записи все сделано как раз в строгом соответствии с этим, и ни один пункт стандарта Си не нарушен - два плюса против одного вашего :)Это огромный минус - вы придумали себе идеальную модель мира и пытаетесь запихнуть в нее идеологию языка С, а она туда не лезет. Вместо того, что бы прочувствовать эту идеологию, вы заявляете, что все, что противоречит вашей модели мира является неправильным и противоречащим здравому смыслу, и объявляете это вне закона. Представьте себе - лето, пляж, люди загорают и купаются. Тут на пляже появляется человек в строгом черном костюме и с портфелем, и начинает громко возмущаться, что народ совсем совесть потерял, и в таком людном общественном месте находятся в практически голом виде, что идет в разрез со всеми нормами поведения в приличном обществе. Ничего не напоминает? :laughing: я бы мог сделать опрос, но в своей формулировке: какая из этих конструкций более соответствует здравому смыслу? Сделайте, только не забудьте упомянуть, что это все же программа на С, а не абстрактная математическая запись я ведь не о Си пекусь, а том, как писать программы в соответствии со здравым смыслом,У вас какой то не тот 'здравый смысл'. Хотя я кажется догадываюсь откуда он взялся. Вы тут упоминали о том, что писали на Pascal'е. Ваша реакция типична для программиста недавно перешедшего с Pascal на С. В Pascal'е действительно логические выражения не являются полноценными выражениями, и используются исключительно в условных операторах. В С это не так, привыкайте, и не пытайтесь всех переучить с С на Pascal - это нереально :rolleyes: Я помню у нас на работе был один товарищь, которому пришлось пересесть с Pascal на С. Так у него сразу появился специальный хидер такого содержимого - #define begin { #define end } Но через несколько месяцев это прошло :1111493779: Я еще помню свои собственные впечатления, когда перешел с Pascal на С, а потом пришлось один проект снова сделать в Pascal'е - было такое впечатление, что на меня надели смирительную рубашку и приковали цепью к компьютеру :laughing: P.S. а что этоу вас за опкод какой-то странный в первом листинге второго варианта - rep? вроде как это префикс-повторитель, и тут он как бы неуместен...Это ret с префиксом rep. Зачем тут префикс - один gcc знает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
igorle 0 26 марта, 2013 Опубликовано 26 марта, 2013 · Жалоба Знаете, ARV, я по началу думал что вы нас тролите. Но потом оценил количество написаного, и решил, что скорее всего вы искренни. Так что давайте так. Если вы толстый троль - то поздравляю, вам удалось сделать вброс в вентилятор. Равнодушных не осталось Если вы пишете искренне - я сделаю еще одну попытку. Вот смотрите, Herz пришел в эту ветку недавно. И хотя он позиционирует себя как электронщик, а не как программист, он прошел путь от возмущения до восхищения двумя восклицательными знаками всего за один день. 25-го он назвал это абсурдом, 26-го сказал, что примет на вооружение. Это обычный путь думающих и развивающихся людей. Я, вообще-то, программист, который решил расширить область знаний в сторону электроники. Что бы мне не отвечали на мои вопросы по электронике, я пытаюсь понять, а не оспорить. В раздел программирования пошел только за тем, чтобы попытаться чем-то отплатить форуму. Но глядя на результаты своего участия здесь, уже не уверен что стоило начинать. Когда (если) вы, ARV, ответите на мои вопросы про электронике, я попытаюсь их понять, но не оспорить. Кто вы в первую очередь? Электронщик - тогда учитесь программировать. Программист? Тогда зачем Вам тратить драгоценные силы на споры с электронищками о программировании? Поскольку у Вас свой путь в истории, то предлагаю потому что еще раньше изучили математику (одну из основополагающих наук, программирование даже не втоично по отношению к ней), в которой коров приводить к километрам никак невозможно. и именно в том и абсурд, что стандарт устанавливает разрешение приведения множества чисел к единственному числу. Будьте последовательны. Стандарт предусматривает запись типа x = x + 10 С математической точки зрения это полная ерунда, так как не может быть верно ни при каких значениях x Добейтесь признания сообщества, что так писать нельзя. Затем: Любой компилятор последних 3ёх-5и лет преобразует операцию с целыми неотрицательными числамиX % N^2 к X & (N^2 - 1) Видите, какие умные компиляторы стали? А Вы код компилятора видели? Я пытался понять один кусочек кода GCC (подозревал, что там есть баг) и не понял ничего :( Уровень абстракции в том месте куда я сунулся был не сравнить с тем, что здесь подавалось как высший пилотаж. Так вот, вместо того, чтобы тратить свои душевные силы на нас, недалеких, идите на форумы, где тусуются авторы GCC и откройте глаза им на то, как правильно писать код. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 26 марта, 2013 Опубликовано 26 марта, 2013 · Жалоба Я помню у нас на работе был один товарищь, которому пришлось пересесть с Pascal на С. Так у него сразу появился специальный хидер такого содержимого - #define begin { #define end } Но через несколько месяцев это прошло А я, когда взялся за Verilog, хотел было сделать обратное #define { begin #define } end Но это невозможно принципиально. Мне как раз нравится лаконичность языка C. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться