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

Поиск:

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


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


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

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



Цитата(Сыроежка @  8.7.2011,  17:45 Найти цитируемый пост)
если ваш код не опирается на системно-зависящие вещи, полностью переносим.

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

Цитата(Сыроежка @  8.7.2011,  17:45 Найти цитируемый пост)
А иначе и быть просто не может! В противном случае мы имели бы столько языков С, сколько существует платформ, и каждый язык имел бы свой синтаксис и свою семантику.

Вы подменяете понятия, вводя всех и себя в том числе в заблуждения..  
т.е. Вы счиатаете что если у языка семантика одна и та же на разных платформах, то корректная программа (по стандарту)  будет выдавать абсолютно один и тот же результат ?

Цитата(Сыроежка @  8.7.2011,  17:45 Найти цитируемый пост)
Язык С - это по сути дела универсальный ассемблер для любой платформы 

так кто то пару постов назад призывал думать широко..и что же ?! сами наступили на те же грабли ?! есть платформы на которых писать на (классическом) си не получится smile

Цитата(Сыроежка @  8.7.2011,  17:45 Найти цитируемый пост)
C/С++ предполагают,что целые числа выравнены в соответсвии с кратностью их размеров[/B] . Почему это не прописано? Да просто потому, что стандарт не определяет размеры целых чисел.

Размер не определяет, а выравнивание определил ?! хотя нет уже вы смягчили слово, теперь он "предполагает".. хотя вот откуда кратность взялась ?! 
а так Вы частично правы.. да стандарт опреляет и размер типов и их выравнивание.. только это уже другой стандарт.. smile






--------------------
PM MAIL WWW   Вверх
Сыроежка
Дата 10.7.2011, 16:22 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(mes @  9.7.2011,  01:32 Найти цитируемый пост)
при этом платформазависиммые не только внешние вызовы, но размеры типовов, а также их представление.. 
да если не на что зависимое код не опирается, он конечно же переносим.. но встает вопрос, в чем тогда преимущество этого языка ?


Цитата(mes @  9.7.2011,  01:32 Найти цитируемый пост)
Цитата(Сыроежка @  8.7.2011,  17:45 )
Язык С - это по сути дела универсальный ассемблер для любой платформы 


так кто то пару постов назад призывал думать широко..и что же ?! сами наступили на те же грабли ?! есть платформы на которых писать на (классическом) си не получится 


У меня такое впечатление, что вам очень тяжело связать вместе пару фраз! Вы спрашиваете, в чем преимущество С? Я вам ответил, что он играет роль универсального языка ассемблера высокого уровня для любой платформы.  А вы, как говорится, смотрите в книгу и видите фигу. 

Цитата(Сыроежка @  8.7.2011,  17:45 ) 
C/С++ предполагают,что целые числа выравнены в соответсвии с кратностью их размеров[/B] . Почему это не прописано? Да просто потому, что стандарт не определяет размеры целых чисел. 


Размер не определяет, а выравнивание определил ?! хотя нет уже вы смягчили слово, теперь он "предполагает".. хотя вот откуда кратность взялась ?! 

Да, размер не определяется, а выравнивание определяется. В стандарте С даже спциально есть определение понятия выравнивания. Не догадываетесь, для чего это нужно? А все очень просто. Это нужно для арифметики с указателями. Только и всего.

Добавлено через 9 минут и 49 секунд
Цитата(azesmcar @  8.7.2011,  22:37 Найти цитируемый пост)
а если использую - будут? очень интересно для чего тогда создаются расширения языка, intrinsic-и, поддержка inline assembler-а, платформозависимые библиотеки? Это все создается затем, чтобы у нас были проблемы?

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


Да, если вы используете ассемблер, то очевидно, что ассемблер на разных платформах разных. Так что странные у вас взгляды.

Стандарта - это как раз "пуп земли"! Потому что если язык не удовлетворяет стандарту, то значит вы говорите о чем-то другом, но не о языке С или С++. То есть ваши фантазии по поводу языка к самому языку никакого отношения не имеют. Более того как раз требование к кмопилятору, чтобы он имаксимально удовлетворял стандарту, является основным тербованием к компиляторам у профессионалов. Иначе ваш код просто будет мало того, что не переносим, а вообще его поведение будет непредсказуемым. Поэтому всякое отклонение от стандарта вы используете, кк говорится, на свой страх и риск. Но страшнее всего то, что порой такие ощиьки, связанные с отклонением о стандарта при переходе с одного компилятора на другой или с одной платформы на другую, порой трудно найти. И тогда поведение программы становится таким, как будто бы на нее влияет погода за окном: сегодня программа работает так, как ожидалось, а завтра совсем по другому. И, как я отметил, такие ошибки очень трудно натйи.

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

Это только дял дилетантов, которые не понимают серьезность проблемы, станларт не является пупом земли. А фирмы, разработчики программного обеспечения, а также фирмы, занимающиеся разработкой компиляторв, поголовно состоят в комитетах по стандартизации. Потому что они понимают серьезность проблемы.
PM MAIL   Вверх
bsa
Дата 10.7.2011, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Сыроежка, пример.
приходит пакет данных, с заголовком:
Код
char magic[2];
uint32_t hdrSize;
uint32_t dataSize;
....
uint16 data[dataSize]
Очевидно, что член hdrSize и последующие не будут иметь нужного выравнивания (именно в этих случаях используется арифметика указателей, о которой спрашивал ТС). Как это написать грамотно?
PM   Вверх
mes
Дата 10.7.2011, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Сыроежка @  10.7.2011,  15:22 Найти цитируемый пост)
У меня такое впечатление, что вам очень тяжело связать вместе пару фраз! 

Мне легко, я пытался , чтоб Вы осознали Ваши тупики без моей подсказки .. 
Чтоб не распыляться, так как Вы все время избегаете целевых вопросов, уделяя внимания оффтопику, еще раз уточню: 
где в стандарте сказанно, что выравнивание не может быть равно 1 ?
как стандартными средствами узнать выравнивание для нужного типа ?
почему если выравнивание на платформе 1, нельзя использовать код из первых постов.. 



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


Эксперт
****


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

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



Цитата(Сыроежка @  10.7.2011,  16:22 Найти цитируемый пост)
н играет роль универсального языка ассемблера высокого уровня для любой платформы

Любой ? И iOS (на чём у них там - на процессоре Samsung кажется), Android, Windows Phone 7 ?


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


Эксперт
****


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

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



Цитата(Сыроежка @  10.7.2011,  16:22 Найти цитируемый пост)
А вы, как говорится, смотрите в книгу и видите фигу. 


Цитата(Сыроежка @  10.7.2011,  15:37 Найти цитируемый пост)
Это кто же вас таким непорядочным воспитал?!!! 



PM MAIL   Вверх
alexvs11
Дата 10.7.2011, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


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

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



bsa
Код

struct  packet
{
  char magic[2];
  uint32_t hdrSize;
  uint32_t dataSize;
  .... 
  uint16 data[dataSize]
} __attribute__ ((packed));


так же проблем не должно возникнуть?
PM MAIL   Вверх
JackYF
Дата 10.7.2011, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Ну вот, только отлучился -- и пропустил такой знатный ср обсуждение.

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

Хочется особо отметить не так давно пришедшего volatile -- так держать.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
fish9370
Дата 10.7.2011, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

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



 smile 


--------------------
undefined
PM MAIL WWW ICQ   Вверх
xvr
Дата 10.7.2011, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата

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


М. Жванецкий. XX Век (выдержка)


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


uploading...
****


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

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



Да уж smile написал сперва много текста, потом стер. Какой смысл отвечать на чушь?
Сыроежка
Оставляешь впечатление человека, который вообще нихрена на C++ серьезнее чем Hello World не писал.

Это сообщение отредактировал(а) azesmcar - 11.7.2011, 09:31
PM   Вверх
bsa
Дата 11.7.2011, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Цитата(alexvs11 @  10.7.2011,  20:41 Найти цитируемый пост)
так же проблем не должно возникнуть? 

должно, если я пользуюсь не GCC или совместимым компилятором. И вообще, твой код нестандартен. А надо сделать стандартно.
PM   Вверх
Сыроежка
Дата 13.7.2011, 15:31 (ссылка)    | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(JackYF @  10.7.2011,  21:34 Найти цитируемый пост)
Сыроежка, не стоит считать всех глупее себя, ошибаются все. У тебя есть похвальное стремление писать программы по стандарту -- это отлично, но реальная жизнь стандартом не ограничиваются. Разработчики компиляторов, предоставляя сотни расширений, делают это не от нечего делать. Всего лишь один пример -- синтаксис текущий стандарта никак не может не повлиять на видимость символов разделяемой библиотеки. Признай свою ошибку, и двигайся дальше.


И что из того, что разработчики делают сотни расширений?! Разве это оправдание того, что вы сами грубо нарушаете стандарт?! Не вижу абсолютно никакой логики в вашем высказывании. Есать лишь у вас желание любой ценой оправдать свое незнание стандарта. Только и всего.

Тут вообще со стороны смешно выглядет ваше поведение в дискуссии. Вы с пеной у рта пытаетесь оправдать ничем не обоснованное грубое нарушение стандарта. И ради чего? Только ради того, чтобы не признавать свое незнание стандарта.smile

Добавлено @ 15:38
Цитата(bsa @  10.7.2011,  17:43 Найти цитируемый пост)
Сыроежка, пример.
приходит пакет данных, с заголовком:
Выделить всёБез подсветки

char magic[2];
uint32_t hdrSize;
uint32_t dataSize;
....
uint16 data[dataSize]
Очевидно, что член hdrSize и последующие не будут иметь нужного выравнивания (именно в этих случаях используется арифметика указателей, о которой спрашивал ТС). Как это написать грамотно? 


Пакеты данных, очевидно, передаются по среде передачи упакованными. И их формат и выравнивание данных очень часто не соответствуют требованиям языков С/С++.

Как это грамотно описать? Обычно проимзводят базировние этого пакет по указателю char *, а затем делают необходимые преобразования и переписывают данные в подготовленную структуру. Очень часто для этих целей используется стандартная функция memcpy для выполнения копирования данных из пакета в переменные программы определенного типа. Тут также стоит отметить, что в пакете целочисленные данные могут быть представлены в формате как big indian, в то время как на вашей платформе они представляются в виде little indian. То есть обычно в любом случае требуется преобразование.



Это сообщение отредактировал(а) Сыроежка - 13.7.2011, 15:40
PM MAIL   Вверх
mes
Дата 13.7.2011, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Сыроежка @  13.7.2011,  14:31 Найти цитируемый пост)
Тут вообще со стороны смешно выглядет ваше поведение в дискуссии. Вы с пеной у рта пытаетесь

мне кажется Вы увлеклись рассматриванием отражения в экране..  smile 


Цитата(Сыроежка @  13.7.2011,  14:31 Найти цитируемый пост)
 ничем не обоснованное грубое нарушение стандарта. 

Цитата(Сыроежка @  26.6.2011,  18:13 Найти цитируемый пост)
То есть суть исходного вопроса, касающегосу игнорирования арифметики указателей сводится к следующему вопросу: является ли следующий код корректным?
Код

int x = 10;
int *p = &x;
p = ( int * )( ( char * )p + 1 );


Ответ: не является!

позвольте узнать корректный аналог вышеприведенного кода.. научите, что там вместо +1 надо было написать..
smile



--------------------
PM MAIL WWW   Вверх
Сыроежка
Дата 13.7.2011, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(mes @  13.7.2011,  16:35 Найти цитируемый пост)
Цитата(Сыроежка @  26.6.2011,  18:13 Найти цитируемый пост)
То есть суть исходного вопроса, касающегосу игнорирования арифметики указателей сводится к следующему вопросу: является ли следующий код корректным?
Выделить всёкод C++
1:
2:
3:
    
int x = 10;
int *p = &x;
p = ( int * )( ( char * )p + 1 );


Ответ: не является!

позвольте узнать корректный аналог вышеприведенного кода.. научите, что там вместо +1 надо было написать..
smile



Очевидно, что до вас с первого раза не доходит. У данного некорректного кода есть лишь один аналог - это отсутствие этого некорректного кода. Надеюсь, еще через одну неделю вы не будете снова задавать этот вопрос.
PM MAIL   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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