Модераторы: bsa

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Микс, Разные простые вопросы 
V
    Опции темы
boostcoder
Дата 13.7.2011, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



Цитата(Сыроежка @  13.7.2011,  16:52 Найти цитируемый пост)
до вас с первого раза не доходит. У данного некорректного кода есть лишь один аналог - это отсутствие этого некорректного кода.

толсто.

Это сообщение отредактировал(а) boostcoder - 13.7.2011, 16:58
PM WWW   Вверх
mes
Дата 13.7.2011, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Сыроежка @  13.7.2011,  15:52 Найти цитируемый пост)
Очевидно, что до вас с первого раза не доходит. У данного некорректного кода есть лишь один аналог - это отсутствие этого некорректного кода. Надеюсь, еще через одну неделю вы не будете снова задавать этот вопрос. 

т.е. прибавлять к указателю значение нельзя ? а если можно то какое ?

Добавлено через 43 секунды
естественно спрашивается  в контексте все того же вышеприведенного примера.. 



--------------------
PM MAIL WWW   Вверх
xvr
Дата 13.7.2011, 20:12 (ссылка) |    (голосов:6) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Сыроежка @  13.7.2011,  15:31 Найти цитируемый пост)
данные могут быть представлены в формате как big indian, в то время как на вашей платформе они представляются в виде little indian.

Эээ, в формате Большого Индейца и Маленького Индейца? Или Индуса?  smile 
PM MAIL   Вверх
Shaggie
Дата 14.7.2011, 00:35 (ссылка) |    (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: нет
Всего: 72



Встречайте цирк с конями, на форуме наконец-то появился настоящий специалист! Старый Shaggie, как всегда, проморгал все важные события. Спасибо товарищам форумчанам, подсказали куда поглядывать.

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

Впрочем, его в треде оказалось предостаточно...


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
Сыроежка
Дата 14.7.2011, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 24.6.2011

Репутация: 1
Всего: 1



Цитата(mes @  13.7.2011,  18:32 Найти цитируемый пост)
Цитата(Сыроежка @  13.7.2011,  15:52 Найти цитируемый пост)
Очевидно, что до вас с первого раза не доходит. У данного некорректного кода есть лишь один аналог - это отсутствие этого некорректного кода. Надеюсь, еще через одну неделю вы не будете снова задавать этот вопрос. 

т.е. прибавлять к указателю значение нельзя ? а если можно то какое ?

Добавлено через 43 секунды
естественно спрашивается  в контексте все того же вышеприведенного примера.. 


Увы, приходиться уже в десятый раз повторять, что этот код некорректный, если значение указателя не выравнено по границе типа int. А Денич Ритчи заявляет еще более строго, что для этого типа должно быть выравнивание по границе слова. Вы хотя бы прочитали книгу Дениса Ритчи "Программирование на С" в разделе, называющемся примерно следующим образом "связь между указателями и целыми числами", если вы стандарт не читаете.

Добавлено через 3 минуты и 5 секунд
Цитата(Shaggie @  14.7.2011,  00:35 Найти цитируемый пост)
Сыроежка, считать идеальным измученный годами, изменяющимися парадигмами, конкурентами, новыми веяниями и обратными совместимостями стандарт переусложнённого языка программирования - это просто верх садомазохизма!



У меня такое ощущение, что вы, как и многие из здесь присутствующих, совершенно не адекватны, и приписываете мне то, что я не говорил.
Я лишь сказал, что такой код, который здесь мусолят, некорректный и может привести к аварийному завершению программы на некоторых платформах. Он не удовлетворяет стандарту, не является, как говорится, implementation defined, а потому его поведение не предсказуемо. То есть это совершенно безграмотный код. 
PM MAIL   Вверх
volatile
Дата 14.7.2011, 23:23 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(Сыроежка @  14.7.2011,  18:57 Найти цитируемый пост)
А Денич Ритчи заявляет 

Сыроежка, Вам не надо книжки больше читать. Они вам не идут в прок.
Вы же не умеете программировать.  smile 
А теория без практики это NULL

PM MAIL   Вверх
Shaggie
Дата 15.7.2011, 02:27 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: нет
Всего: 72



Цитата(Сыроежка @  14.7.2011,  19:57 Найти цитируемый пост)
такое ощущение, что вы, как и многие из здесь присутствующих, совершенно не адекватны

А то как же!  smile  smile

Цитата(Сыроежка @  14.7.2011,  19:57 Найти цитируемый пост)
такой код, который здесь мусолят, некорректный и может привести к аварийному завершению программы на некоторых платформах. Он не удовлетворяет стандарту, не является, как говорится, implementation defined, а потому его поведение не предсказуемо. То есть это совершенно безграмотный код.  

Обычно программисты не пишут некорректный код, который "может привести к аварийному завершению программы на некоторых платформах". Просто потому, что такой код сложен в чтении и чреват ошибками в дальнейшем. То есть попросту не нужен. Полезно уметь ценить своё время и время своих коллег.

Однако мы не живём в идеальном сферическом вакуумном мире. Мы инженеры. Наша работа, работа профессионалов своего дела, - решать проблемы заказчика. Всё! Часто в условиях ограниченных ресурсов (времени, памяти, нервов). Хороший код - это такой код, который решает задачи 1) текущей работоспособности, 2) дальнейшей поддержки.

Задачи бывают разные. Коллеги меня поймут, embedded программисты поймут в особенности. Дано: слабенький процессор, мизер памяти, приходится силой отвоёвывать каждый байт и каждый такт. В таких условиях код volatile
Код

int *p = адрес;
// сдвинуть на 3 байта
 p = (int*)((char*) p + 3);

бьёт дуплетом - он 1) работоспособен, 2) поддерживаем (за счёт комментария. И хотя он очень низкоуровнев и не даёт описания проблемы, из-за которой пришлось применить данный хак, при этом даже в текущем виде заметно облегчает чтение кода). 

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

Краткие выводы по первым двум страницам темы: 1) такого рода код писать можно и в отдельных случаях он работает, 2) стандарт грозит пальчиком, 3) программисты всё это знают, сами так не пишут и других на это не одобряют, 4) но в случае необходимости трюки работают и помогают решить проблему.

Краткие выводы по остальным страницам: 1) хамов никто не любит.


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
borisbn
Дата 15.7.2011, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Сыроежка, я тут подумал-подумал, а ведь получается, что Вы правы!
Я не понимаю этих людей, которые говорят о каком-то сферическом вакууме...
Давайте рассмотрим абсолютно реалистичную ситуацию (это я не только к Вам, а ко всем).

Дано (это предположение, все совпадения - случайны):
1. Допустим, в мессенджере QIP есть плагин для протокола ICQ, требующий реализацию в dll-ке такой ф-ции
Код
bool plugin_func( int * p );

Причём объявлена она без extern "C", и, соответственно, декорирована, т.е. изменить её интерфейс мы не можем.
2. В 0-м и в 42-м int'е протокола ICQ лежат требуемые для плагина данные.
3. Ваша и моя фирма делают реализацию такого плагина. Выглядят наши плагины абсолютно одинакого (во всяком случае в начале)
Код

bool plugin_func( int * p ) {
    int b0 = p[ 0 ];
    int b42 = p[ 42 ];
    if ( b42 > b0 ) {
        ...
    }
...
}

4. Но настаёт момент, когда ICQ меняет протокол (что скажете - сферический вакуум?), и теперь перед данными, которые шли и раньше добавляется один байт (допустим тип сообщения). На ICQ ни я ни Вы влиять не можем. На QIP тоже.

Что делаю я ? Переписываю плагин:
Код

bool plugin_func( int * p ) {
    p = (int*)((char*)(p) + 1); // CENCORED ICQ-шники поменяли протокол
    int b0 = p[ 0 ];
    int b42 = p[ 42 ];
    if ( b42 > b0 ) {
        ...
    }
...
}

Что делаете Вы ? Отказываетесь писать такой совершенно некорректный код.

Выводы (промежуточные):
Что в активе у меня ?
- мой плагин работает с новой версией протокола
- я продал 1 млн. плагинов за 99 коп. за штуку
Что у меня в пассиве ?
- я написал некорректный код
- я нарушил стандарт
- меня неодобрят в W3C
- мой код не будет работать на IBM mainframe и PIC-контроллерах
- я не стал миллионером (99 коп. же)
Что в активе у Вас ?
- Вы не поступились принципами
- Ваш код написан в полном соответствии со стандартом
- Вы чисты перед W3C
- Ваш плагин не будет падать на IBM mainframe и PIC-контроллерах
Что в пассиве у Вас ?
- Вас уволили

Итого (актив:пассив) - у меня 2:5, у Вас 4:1

Выводы (окончательные):
Вы абсолютно правы. Не слушайте этих неадекватных людей. Так держать!!!


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mes
Дата 15.7.2011, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(borisbn @  15.7.2011,  07:27 Найти цитируемый пост)
- мой код не будет работать на IBM mainframe и PIC-контроллерах

ну тогда вопрос на засыпку, a что будете делать если надо, чтоб код также работал и на вышеперечисленных платформах ? smile 

Цитата(Shaggie @  15.7.2011,  01:27 Найти цитируемый пост)
Краткие выводы по первым двум страницам темы: 1) такого рода код писать можно и в отдельных случаях он работает, 2) стандарт грозит пальчиком, 3) программисты всё это знают, сами так не пишут и других на это не одобряют, 4) но в случае необходимости трюки работают и помогают решить проблему.

Краткие выводы по остальным страницам: 1) хамов никто не любит. 

 smile 


Это сообщение отредактировал(а) mes - 15.7.2011, 08:47


--------------------
PM MAIL WWW   Вверх
borisbn
Дата 15.7.2011, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(mes @  15.7.2011,  08:46 Найти цитируемый пост)
ну тогда вопрос на засыпку, a что будете делать если надо, чтоб код также работал и на вышеперечисленных платформах ?

ещё раз перепишу плагин QIP'а для протокола ICQ для IBM mainframe и PIC-контроллеров:
Код

bool plugin_func( int * p ) {
#ifdef IBM_MAINFRAME || PIC_CONTROLLER
    char * pCh = (char*)p;
    pCh++; // CENCORED ICQ-шники поменяли протокол
#ifdef LITTLE_ENDIAN
    int b0 =   (unsigned int)pCh[ 0 ]
             | ( (unsigned int)(pCh[ 1 ]) << 8 )
             | ( (unsigned int)(pCh[ 2 ]) << 16 )
             | ( (unsigned int)(pCh[ 3 ]) << 24 );
    int b42 =  (unsigned int)pCh[ 42 * 4 + 0 ]
             | ( (unsigned int)(pCh[ 42 * 4 + 1 ]) << 8 )
             | ( (unsigned int)(pCh[ 42 * 4 + 2 ]) << 8 )
             | ( (unsigned int)(pCh[ 42 * 4 + 3 ]) << 8 );
#else
    int b0 =   (unsigned int)pCh[ 3 ]
             | ( (unsigned int)(pCh[ 2 ]) << 8 )
             | ( (unsigned int)(pCh[ 1 ]) << 16 )
             | ( (unsigned int)(pCh[ 0 ]) << 24 );
    int b42 =  (unsigned int)pCh[ 42 * 4 + 3 ]
             | ( (unsigned int)(pCh[ 42 * 4 + 2 ]) << 8 )
             | ( (unsigned int)(pCh[ 42 * 4 + 1 ]) << 8 )
             | ( (unsigned int)(pCh[ 42 * 4 + 0 ]) << 8 );
#endif
#else // это нужно для того невероятного случая, если IBM и PIC'и откажутся от QIP'а.
       // тогда код будет более читаемым :)
    p = (int*)((char*)(p) + 1); // CENCORED ICQ-шники поменяли протокол
    int b0 = p[ 0 ];
    int b42 = p[ 42 ];
#endif
    if ( b42 > b0 ) {
        ...
    }
...
}


IMHO замечательно получилось  smile . W3C будет довольна (довольно?)



Это сообщение отредактировал(а) borisbn - 15.7.2011, 09:30


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
xvr
Дата 15.7.2011, 09:09 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Представьте себе - мне надо написать программу управления для стиральной машины (для блока управления стиральной машины). Я вооружился стандартами, поднатужился, и выдал на гора совершенство. Оно соответствует всем пунктам стандарта, в нем нет ни строчки кода, о которой стандарт говорит implementation dependent (не говоря уже о более крепких выражениях). Оно использует только стандартные С и Posix библиотеки, и вообще оно полностью соответствует тому самому 'сферическому коню в вакууме'. 

Вопрос - если я откомпилю и запущу мою программу на PC, она превратится в стиральную машину?  smile А если нет, то нафига было надрываться и добиваться (тут - от слова 'добил') такого всеобъемлющего соответствия не только стандарту, но и всем мыслимым и немыслимым критериям совместимости?  smile

Добавлено через 10 минут и 10 секунд
Кстати, вот замечательное описание стиля спора Сыроежки:

Цитата

Стиль спора
Хватит спорить о вариантах зернопогрузчика. Долой диспуты вокруг технических вопросов.

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

Что может говорить хромой об искусстве Герберта фон Караяна? Если ему сразу заявить, что он хромой, он признает себя побежденным.

О чем может спорить человек, который не поменял паспорт? Какие взгляды на архитектуру может высказать мужчина без прописки? Пойманный с поличным, он сознается и признает себя побежденным.

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

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

В наше время, когда уничтожают вредных насекомых, стерилизуя самцов, мы должны поднять уровень спора до абстрактной высоты. Давайте рассуждать о крахе и подъеме Голливуда, не видя ни одного фильма. Давайте сталкивать философов, не читая их работ. Давайте спорить о вкусе устриц и кокосовых орехов с теми, кто их ел, до хрипоты, до драки, воспринимая вкус еды на слух, цвет на зуб, вонь на глаз, представляя себе фильм по названию, живопись по фамилии, страну по "Клубу кинопутешествий", остроту мнений по хрестоматии.

Выводя продукцию на уровень мировых стандартов, которых никто не видел, мы до предела разовьем все семь чувств плюс интуицию, которая с успехом заменяет информацию. С чем и приходится себя поздравить. Прошу к столу - вскипело!

М. Жванецкий

PM MAIL   Вверх
mes
Дата 15.7.2011, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(borisbn @  15.7.2011,  08:07 Найти цитируемый пост)
LITTLE_INDIAN

видать замечание про индейцов прошло даром..  smile 


--------------------
PM MAIL WWW   Вверх
borisbn
Дата 15.7.2011, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(mes @  15.7.2011,  09:27 Найти цитируемый пост)
видать замечание про индейцов прошло даром..

вот чёрт. Видел же замечание, залез в первую попавшуюся доку, увидел
Цитата

Q_LITTLE_ENDIAN

и всё равно лажанул :( 
исправил.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mes
Дата 15.7.2011, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(borisbn @  15.7.2011,  08:07 Найти цитируемый пост)
 int b0 =   (unsigned int)pCh[ 0 ]
             | ( (unsigned int)(pCh[ 1 ]) << 8 )
             | ( (unsigned int)(pCh[ 2 ]) << 16 )
             | ( (unsigned int)(pCh[ 3 ]) << 24 );
    int b42 =  (unsigned int)pCh[ 42 * 4 + 0 ]
             | ( (unsigned int)(pCh[ 42 * 4 + 1 ]) << 8 )
             | ( (unsigned int)(pCh[ 42 * 4 + 2 ]) << 8 )
             | ( (unsigned int)(pCh[ 42 * 4 + 3 ]) << 8 );
#else
    int b0 =   (unsigned int)pCh[ 3 ]
             | ( (unsigned int)(pCh[ 2 ]) << 8 )
             | ( (unsigned int)(pCh[ 1 ]) << 16 )
             | ( (unsigned int)(pCh[ 0 ]) << 24 );
    int b42 =  (unsigned int)pCh[ 42 * 4 + 3 ]
             | ( (unsigned int)(pCh[ 42 * 4 + 2 ]) << 8 )
             | ( (unsigned int)(pCh[ 42 * 4 + 1 ]) << 8 )
             | ( (unsigned int)(pCh[ 42 * 4 + 0 ]) << 8 

однако..  smile 
мы за ценой не постоим ©


--------------------
PM MAIL WWW   Вверх
borisbn
Дата 15.7.2011, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(mes @  15.7.2011,  09:31 Найти цитируемый пост)
однако..   мы за ценой не постоим

ну а что сейчас не так ?   smile 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Страницы: (9) Все « Первая ... 5 6 [7] 8 9 
Закрытая темаСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1082 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.