|
|
  |
Си |
|
|
|
Mar 25 2013, 17:06
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Цитата(ViKo @ Mar 25 2013, 20:52)  В данном конкретном вопросе (!! vs !) я не нахожу причин, почему igorle отказывается использовать одиночные !, кроме, как привычки. видимо, он вместо if(a) использует if(!!a). тогда понятно, почему !! вместо !
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Mar 25 2013, 17:15
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Цитата(ViKo @ Mar 25 2013, 21:02)  Раньше я даже в ... нетрезвом виде не допускал, что такое возможно. Не знал. все мы в определенный момент что-то новое узнаем. просто один в восторге от того, что новое знание не укладывается в его голове, а другой в ужасе. это как знание уязвимых точек человеческого тела: обязательно найдется кто-то, кто в первую очередь кого-то покалечит после знакомства с ними...все приведенные здесь примеры многократно описаны в литературе, так что никто из здешних авторитетов америки не открыл. просто эти знания редко-редко кому на самом деле помогают, и потому редко-редко кто о них помнит. но порой блеснуть ими перед новичком очень к месту. вместо того, чтобы научить новичка думать, учат следовать готовым шаблонным решениям.
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Mar 25 2013, 17:19
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(ARV @ Mar 25 2013, 20:15)  все мы в определенный момент что-то новое узнаем. просто один в восторге от того, что новое знание не укладывается в его голове, а другой в ужасе. это как знание уязвимых точек человеческого тела: обязательно найдется кто-то, кто в первую очередь кого-то покалечит после знакомства с ними...все приведенные здесь примеры многократно описаны в литературе, так что никто из здешних авторитетов америки не открыл. просто эти знания редко-редко кому на самом деле помогают, и потому редко-редко кто о них помнит. но порой блеснуть ими перед новичком очень к месту. вместо того, чтобы научить новичка думать, учат следовать готовым шаблонным решениям. Мне кажется, что всю эту цитату мог бы сказать и igorle.
|
|
|
|
|
Mar 25 2013, 17:26
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Цитата(ViKo @ Mar 25 2013, 21:19)  Мне кажется, что всю эту цитату мог бы сказать и igorle.  а он и сказал, только по-своему. когда упомянул, что ! его заставляет задуматься. т.е. первый посыл у нас был одинаков, но вот направления дальнейшего мышления - разный. его потянуло в область, как подогнать под стандарт то, что вызывает сомнения, а я сразу сказал, что это НЕ ЛОГИЧНО, и просто не стал подгонять, а стал об этом говорить другим. не логично называть результат арифметического выражения логическим, не логично превращать его всякими шаманскими средствами в логическое, нелогично смешивать арифметику с логикой... но есть лазейка: стандарт позволяет, и логика сразу отключается (извините за тавталогию). никто ведь даже не видит этой НЕЛОГИЧНОСТИ, как я ни пытался ее показать.
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Mar 25 2013, 21:04
|
Местный
  
Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753

|
Я искренне рад, что неожиданно вспыхнувший флейм закончился впорлне миролюбиво, и позволил всем участникам (в том числе и мне) расширить как диапазон познаний, так и диапазон терпимости. Может быть вообще закрыть эту тему? От греха подальше. Слишком общая она. "Весь Си в одном флаконе" Цитата(ViKo @ Mar 25 2013, 19:09)  Инверсию означает ~, а ! означает логическое отрицание (НЕ), и он тоже превращает в булеву форму. Да, конечно отрицание, а не инверсию. Как уже говорили - скомпилированный код будет одинаковый. А ставить один или два восклицательных знака - дело привычки. Не более того. Как я уже говорил - для меня !! означает кастинг к булевому типу.
|
|
|
|
|
Mar 26 2013, 05:48
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(igorle @ Mar 25 2013, 19:04)  Попробовать - можно. Делать - не стоит. Операция "остаток от деления" очень тяжелая. Для расширения кругозора можно сделать вот так: Код с=(!a + !b) & 0x1; А кто сказал что будет применена операция остаток от деления? Любой компилятор последних 3ёх-5и лет преобразует операцию с целыми неотрицательными числами Код X % N^2 к Код X & (N^2 - 1) И это всем давно известно и используется абсолютно обыденно. Цитата(Herz @ Mar 25 2013, 19:43)  Ведь вижу запись, выглядящую абсурдно. Вот Вы тоже: прочтите её вслух, а затем тоже сделайте выводы. Не смешно? Только честно. Абсолютно честно никакого абсурда. Вижу идею: приведение целых к булу (пусть и с инверсией - не важно) и последующее исключающее или двух целых. Очень лаконично и красиво. Повторюсь - никакого абсурда. Почему вы сначала изучали законы Кирхгофа, а только потом приступили к схемотехнике? А тут позволяете себе не зная стандарта (читай законов Кирхгофа) давать Коментарии подобного рода? Вот в этом я вижу абсурд.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Mar 26 2013, 05:59
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Цитата(demiurg_spb @ Mar 26 2013, 09:48)  Абсолютно честно никакого абсурда. Вижу идею: приведение целых к булу (пусть и с инверсией - не важно) и последующее исключающее или двух целых. Очень лаконично и красиво. Никакого абсурда. Почему вы сначала изучали законы Киргофа, а только потом приступили к схемотехнике? А тут позволяете себе не зная стандарта (читай законов Киргофа) давать Коментарии подобного рода? потому что еще раньше изучили математику (одну из основополагающих наук, программирование даже не втоично по отношению к ней), в которой коров приводить к километрам никак невозможно. и именно в том и абсурд, что стандарт устанавливает разрешение приведения множества чисел к единственному числу. Законы Кирхгофа основаны на законах математики (и физики) и выводятся строго на логической базе этих наук, поэтому эти законы выглядят красиво, логично и спорить с ними бесполезно. а стандарт, родившийся просто из головы человека, может быть оспариваем. хотя бы частично. это не закон природы.
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Mar 26 2013, 06:04
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(ARV @ Mar 26 2013, 09:59)  это не закон природы. Вам уже давно пора уняться и перейти от законов природы к законам Божьим.... Возможно будет гораздо больше пользы... Мы сейчас программируем на Си. У этого языка есть правила и законы (стандарт). О чём ещё можно говорить??? Напишите свой собственный язык и только тогда втирайте очки окружающим! Цитата потому что еще раньше изучили математику А ещё раньше ходить на горшок! И что? Мои дети закончили этот этап. Повторюсь, есть стандарт - его утверждал и редактировал не один и не 2 и даже не 10 человек. А тут появился пуп земли и ему не нравится. Не нравится - не ешь! Или вы настолько умны, что считаете себе возможным давать рекомендации - читай изобретать новый стандарт поверх имеющегося? Я поражён вашим тупым упорством. Вы ничего не можете изменить в сложившейся ситуации и учиться вам тоже видимо лень. Вам остаётся одно - идти в депутаты и с высокой арены поливать потоком мутного сознания окружающих. Прощайте!
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Mar 26 2013, 07:29
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Цитата(demiurg_spb @ Mar 26 2013, 10:04)  Прощайте! неужели я вас довел до суицида?!  я не опровергаю стандарты, даже не призываю их пересматривать. это вы усматриваете в моих словах посягательство на святое. я ратую за приведение программ в соответствие со здравым смыслом без противоречий со стадартом. что в этом не так? или важнее именно отсутствие здравого смысла в коде?  а если помечтать: вот стал я депутатом какого-нибудь европарламента и добился пересмотра стандарта Си. уже на следующий день вы станете с не меньшим упорством перекрещивть какого-нибудь igorle в новую веру?
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Mar 26 2013, 07:51
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(ARV @ Mar 25 2013, 15:32)  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 т.е. компилятор вообще все выкинул Цитата потому как даже под WinAVR в моем варианте ассемблерный листинг функций давал ВАШ результат, А вот это непонятно, почему тогда конечный результат получился прямо противоположный? Цитата который включает в том числе подготовительные действия по вызову функций, У функций одинаковый прототип, почему тогда отличаются 'подготовительные действия по вызову функций'? Цитата что касается взгляда на логику, то по-моему, двух мнений тут быть не может: операция ^ арифметическая битовая, операция ! -логическая. в одном выражении смешаны два вида операций. Еще раз, медленно и печально - в С НЕТ РАЗЛИЧИЯ между логическими и арифметическими операциями. И чем быстрее вы (или кто угодно) к этому привыкнет, тем будет лучше. Цитата мой вариант как раз и отражает суть булевой алгебры преобразования логических функций - помните это? в моем варианте записи все сделано как раз в строгом соответствии с этим, и ни один пункт стандарта Си не нарушен - два плюса против одного вашего  Это огромный минус - вы придумали себе идеальную модель мира и пытаетесь запихнуть в нее идеологию языка С, а она туда не лезет. Вместо того, что бы прочувствовать эту идеологию, вы заявляете, что все, что противоречит вашей модели мира является неправильным и противоречащим здравому смыслу, и объявляете это вне закона. Представьте себе - лето, пляж, люди загорают и купаются. Тут на пляже появляется человек в строгом черном костюме и с портфелем, и начинает громко возмущаться, что народ совсем совесть потерял, и в таком людном общественном месте находятся в практически голом виде, что идет в разрез со всеми нормами поведения в приличном обществе. Ничего не напоминает? Цитата я бы мог сделать опрос, но в своей формулировке: какая из этих конструкций более соответствует здравому смыслу? Сделайте, только не забудьте упомянуть, что это все же программа на С, а не абстрактная математическая запись Цитата я ведь не о Си пекусь, а том, как писать программы в соответствии со здравым смыслом, У вас какой то не тот 'здравый смысл'. Хотя я кажется догадываюсь откуда он взялся. Вы тут упоминали о том, что писали на Pascal'е. Ваша реакция типична для программиста недавно перешедшего с Pascal на С. В Pascal'е действительно логические выражения не являются полноценными выражениями, и используются исключительно в условных операторах. В С это не так, привыкайте, и не пытайтесь всех переучить с С на Pascal - это нереально Я помню у нас на работе был один товарищь, которому пришлось пересесть с Pascal на С. Так у него сразу появился специальный хидер такого содержимого - Код #define begin { #define end } Но через несколько месяцев это прошло Я еще помню свои собственные впечатления, когда перешел с Pascal на С, а потом пришлось один проект снова сделать в Pascal'е - было такое впечатление, что на меня надели смирительную рубашку и приковали цепью к компьютеру Цитата P.S. а что этоу вас за опкод какой-то странный в первом листинге второго варианта - rep? вроде как это префикс-повторитель, и тут он как бы неуместен... Это ret с префиксом rep. Зачем тут префикс - один gcc знает
|
|
|
|
|
Mar 26 2013, 08:28
|
Местный
  
Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753

|
Знаете, ARV, я по началу думал что вы нас тролите. Но потом оценил количество написаного, и решил, что скорее всего вы искренни. Так что давайте так. Если вы толстый троль - то поздравляю, вам удалось сделать вброс в вентилятор. Равнодушных не осталось Если вы пишете искренне - я сделаю еще одну попытку. Вот смотрите, Herz пришел в эту ветку недавно. И хотя он позиционирует себя как электронщик, а не как программист, он прошел путь от возмущения до восхищения двумя восклицательными знаками всего за один день. 25-го он назвал это абсурдом, 26-го сказал, что примет на вооружение. Это обычный путь думающих и развивающихся людей. Я, вообще-то, программист, который решил расширить область знаний в сторону электроники. Что бы мне не отвечали на мои вопросы по электронике, я пытаюсь понять, а не оспорить. В раздел программирования пошел только за тем, чтобы попытаться чем-то отплатить форуму. Но глядя на результаты своего участия здесь, уже не уверен что стоило начинать. Когда (если) вы, ARV, ответите на мои вопросы про электронике, я попытаюсь их понять, но не оспорить. Кто вы в первую очередь? Электронщик - тогда учитесь программировать. Программист? Тогда зачем Вам тратить драгоценные силы на споры с электронищками о программировании? Поскольку у Вас свой путь в истории, то предлагаю Цитата(ARV @ Mar 26 2013, 08:59)  потому что еще раньше изучили математику (одну из основополагающих наук, программирование даже не втоично по отношению к ней), в которой коров приводить к километрам никак невозможно. и именно в том и абсурд, что стандарт устанавливает разрешение приведения множества чисел к единственному числу. Будьте последовательны. Стандарт предусматривает запись типа x = x + 10С математической точки зрения это полная ерунда, так как не может быть верно ни при каких значениях xДобейтесь признания сообщества, что так писать нельзя. Затем: Цитата(demiurg_spb @ Mar 26 2013, 08:48)  Любой компилятор последних 3ёх-5и лет преобразует операцию с целыми неотрицательными числами Код X % N^2 к Код X & (N^2 - 1) Видите, какие умные компиляторы стали? А Вы код компилятора видели? Я пытался понять один кусочек кода GCC (подозревал, что там есть баг) и не понял ничего  Уровень абстракции в том месте куда я сунулся был не сравнить с тем, что здесь подавалось как высший пилотаж. Так вот, вместо того, чтобы тратить свои душевные силы на нас, недалеких, идите на форумы, где тусуются авторы GCC и откройте глаза им на то, как правильно писать код.
|
|
|
|
|
Mar 26 2013, 08:35
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(XVR @ Mar 26 2013, 10:51)  Я помню у нас на работе был один товарищь, которому пришлось пересесть с Pascal на С. Так у него сразу появился специальный хидер такого содержимого - Код #define begin { #define end } Но через несколько месяцев это прошло А я, когда взялся за Verilog, хотел было сделать обратное Код #define { begin #define } end Но это невозможно принципиально. Мне как раз нравится лаконичность языка C.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|