реклама на сайте
подробности

 
 
19 страниц V  « < 14 15 16 17 18 > »   
Reply to this topicStart new topic
> Си
ARV
сообщение Mar 25 2013, 17:06
Сообщение #226


Профессионал
*****

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



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


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Mar 25 2013, 17:07
Сообщение #227


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(ViKo @ Mar 25 2013, 21:02) *
Читал две книжки, не считая каких-то еще при социализме изданных - K&R и Шилдта. Ни там, ни там такого 5[a] не написано. Наверное, не без причин.

надо у Страуструпа посмотреть, но тоже не помню такого
Go to the top of the page
 
+Quote Post
ARV
сообщение Mar 25 2013, 17:15
Сообщение #228


Профессионал
*****

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



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




--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 25 2013, 17:19
Сообщение #229


Универсальный солдатик
******

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



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

Мне кажется, что всю эту цитату мог бы сказать и igorle. biggrin.gif beer.gif
Go to the top of the page
 
+Quote Post
ARV
сообщение Mar 25 2013, 17:26
Сообщение #230


Профессионал
*****

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



Цитата(ViKo @ Mar 25 2013, 21:19) *
Мне кажется, что всю эту цитату мог бы сказать и igorle. biggrin.gif beer.gif


а он и сказал, только по-своему. когда упомянул, что ! его заставляет задуматься. т.е. первый посыл у нас был одинаков, но вот направления дальнейшего мышления - разный. его потянуло в область, как подогнать под стандарт то, что вызывает сомнения, а я сразу сказал, что это НЕ ЛОГИЧНО, и просто не стал подгонять, а стал об этом говорить другим. не логично называть результат арифметического выражения логическим, не логично превращать его всякими шаманскими средствами в логическое, нелогично смешивать арифметику с логикой... но есть лазейка: стандарт позволяет, и логика сразу отключается (извините за тавталогию).


никто ведь даже не видит этой НЕЛОГИЧНОСТИ, как я ни пытался ее показать.



--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
igorle
сообщение Mar 25 2013, 21:04
Сообщение #231


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Я искренне рад, что неожиданно вспыхнувший флейм закончился впорлне миролюбиво, и позволил всем участникам (в том числе и мне) расширить как диапазон познаний, так и диапазон терпимости.
Может быть вообще закрыть эту тему? От греха подальше. Слишком общая она. "Весь Си в одном флаконе"

Цитата(ViKo @ Mar 25 2013, 19:09) *
Инверсию означает ~, а ! означает логическое отрицание (НЕ), и он тоже превращает в булеву форму.

Да, конечно отрицание, а не инверсию. Как уже говорили - скомпилированный код будет одинаковый. А ставить один или два восклицательных знака - дело привычки. Не более того. Как я уже говорил - для меня !! означает кастинг к булевому типу.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Mar 25 2013, 21:07
Сообщение #232


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Я вот что хочу сказать. Если общий проект написан в стиле !!, то и придерживаться нужно подобного стиля. Если в стиле "понятный", то в таком
Знать возможности и применять их - это только на усмотрение в конкретной ситуации
igorle, не мы начинали тему, но все уже 16 листов читать познавательно. Зачем закрывать?
Go to the top of the page
 
+Quote Post
Herz
сообщение Mar 25 2013, 22:32
Сообщение #233


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



А вообще приём с двойным восклицательным знаком красивый. Возьму, пожалуй, на вооружение. Как идиому.
Напомнил мне, по аналогии, одно схемотехническое ухищрение, тоже нестандартное: выделение модуля сигнала посредством одностороннего насыщения усилителя за счёт однополярности питания. rolleyes.gif
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Mar 26 2013, 05:48
Сообщение #234


неотягощённый злом
******

Группа: Свой
Сообщений: 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) *
Ведь вижу запись, выглядящую абсурдно. Вот Вы тоже: прочтите её вслух, а затем тоже сделайте выводы. Не смешно? Только честно.
Абсолютно честно никакого абсурда.
Вижу идею: приведение целых к булу (пусть и с инверсией - не важно) и последующее исключающее или двух целых. Очень лаконично и красиво. Повторюсь - никакого абсурда.
Почему вы сначала изучали законы Кирхгофа, а только потом приступили к схемотехнике?
А тут позволяете себе не зная стандарта (читай законов Кирхгофа) давать Коментарии подобного рода?
Вот в этом я вижу абсурд.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
ARV
сообщение Mar 26 2013, 05:59
Сообщение #235


Профессионал
*****

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



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


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Mar 26 2013, 06:04
Сообщение #236


неотягощённый злом
******

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



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


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
ARV
сообщение Mar 26 2013, 07:29
Сообщение #237


Профессионал
*****

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



Цитата(demiurg_spb @ Mar 26 2013, 10:04) *
Прощайте!
неужели я вас довел до суицида?! rolleyes.gif я не опровергаю стандарты, даже не призываю их пересматривать. это вы усматриваете в моих словах посягательство на святое. я ратую за приведение программ в соответствие со здравым смыслом без противоречий со стадартом. что в этом не так? или важнее именно отсутствие здравого смысла в коде?


bb-offtopic.gif а если помечтать: вот стал я депутатом какого-нибудь европарламента и добился пересмотра стандарта Си. уже на следующий день вы станете с не меньшим упорством перекрещивть какого-нибудь igorle в новую веру? wink.gif


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
XVR
сообщение Mar 26 2013, 07:51
Сообщение #238


Гуру
******

Группа: Свой
Сообщений: 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
т.е. компилятор вообще все выкинул rolleyes.gif

Цитата
потому как даже под WinAVR в моем варианте ассемблерный листинг функций давал ВАШ результат,
А вот это непонятно, почему тогда конечный результат получился прямо противоположный?
Цитата
который включает в том числе подготовительные действия по вызову функций,
У функций одинаковый прототип, почему тогда отличаются 'подготовительные действия по вызову функций'?

Цитата
что касается взгляда на логику, то по-моему, двух мнений тут быть не может: операция ^ арифметическая битовая, операция ! -логическая. в одном выражении смешаны два вида операций.
Еще раз, медленно и печально - в С НЕТ РАЗЛИЧИЯ между логическими и арифметическими операциями. И чем быстрее вы (или кто угодно) к этому привыкнет, тем будет лучше.

Цитата
мой вариант как раз и отражает суть булевой алгебры преобразования логических функций - помните это? в моем варианте записи все сделано как раз в строгом соответствии с этим, и ни один пункт стандарта Си не нарушен - два плюса против одного вашего sm.gif
Это огромный минус - вы придумали себе идеальную модель мира и пытаетесь запихнуть в нее идеологию языка С, а она туда не лезет. Вместо того, что бы прочувствовать эту идеологию, вы заявляете, что все, что противоречит вашей модели мира является неправильным и противоречащим здравому смыслу, и объявляете это вне закона.

Представьте себе - лето, пляж, люди загорают и купаются. Тут на пляже появляется человек в строгом черном костюме и с портфелем, и начинает громко возмущаться, что народ совсем совесть потерял, и в таком людном общественном месте находятся в практически голом виде, что идет в разрез со всеми нормами поведения в приличном обществе. Ничего не напоминает? laughing.gif

Цитата
я бы мог сделать опрос, но в своей формулировке: какая из этих конструкций более соответствует здравому смыслу?
Сделайте, только не забудьте упомянуть, что это все же программа на С, а не абстрактная математическая запись

Цитата
я ведь не о Си пекусь, а том, как писать программы в соответствии со здравым смыслом,
У вас какой то не тот 'здравый смысл'.

Хотя я кажется догадываюсь откуда он взялся. Вы тут упоминали о том, что писали на Pascal'е. Ваша реакция типична для программиста недавно перешедшего с Pascal на С. В Pascal'е действительно логические выражения не являются полноценными выражениями, и используются исключительно в условных операторах. В С это не так, привыкайте, и не пытайтесь всех переучить с С на Pascal - это нереально rolleyes.gif

Я помню у нас на работе был один товарищь, которому пришлось пересесть с Pascal на С. Так у него сразу появился специальный хидер такого содержимого -
Код
#define begin {
#define end }
Но через несколько месяцев это прошло 1111493779.gif

Я еще помню свои собственные впечатления, когда перешел с Pascal на С, а потом пришлось один проект снова сделать в Pascal'е - было такое впечатление, что на меня надели смирительную рубашку и приковали цепью к компьютеру laughing.gif

Цитата
P.S. а что этоу вас за опкод какой-то странный в первом листинге второго варианта - rep? вроде как это префикс-повторитель, и тут он как бы неуместен...
Это ret с префиксом rep. Зачем тут префикс - один gcc знает biggrin.gif
Go to the top of the page
 
+Quote Post
igorle
сообщение Mar 26 2013, 08:28
Сообщение #239


Местный
***

Группа: Свой
Сообщений: 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 (подозревал, что там есть баг) и не понял ничего sad.gif Уровень абстракции в том месте куда я сунулся был не сравнить с тем, что здесь подавалось как высший пилотаж.
Так вот, вместо того, чтобы тратить свои душевные силы на нас, недалеких, идите на форумы, где тусуются авторы GCC и откройте глаза им на то, как правильно писать код.


Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 26 2013, 08:35
Сообщение #240


Универсальный солдатик
******

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



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

А я, когда взялся за Verilog, хотел было сделать обратное
Код
#define { begin
#define } end

Но это невозможно принципиально.

Мне как раз нравится лаконичность языка C.
Go to the top of the page
 
+Quote Post

19 страниц V  « < 14 15 16 17 18 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 09:27
Рейтинг@Mail.ru


Страница сгенерированна за 0.01522 секунд с 7
ELECTRONIX ©2004-2016