![]() |
Модераторы: bsa Страницы: (9) Все « Первая ... 3 4 [5] 6 7 ... Последняя »
( Перейти к первому непрочитанному сообщению ) |
![]() ![]() ![]() |
|
xvr |
|
||||||||||||||||||||||||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Далеко не на одной, вынужден вас огорчить ![]()
![]()
![]()
Когда на С или С++ объявляется статическая переменная типа int, то как раз генерируется директива ассемблера DS F. [/quote]gcc предпримет явные действия по выравниванию, а не будет полагаться на ассемблер
результат после g++ (ассемблер)
![]()
Это ваши домыслы. Стандарт этого не требует. Если вам нужен 100% переносимый код - пишите на Java, хотя и там 100% не получается ![]()
Не записывайте себя во 'весь мир'.
![]() PS. И не надо со мной спорить, просто поверьте человеку, который принимал участие в написании как минимум 2х коммерческих компиляторов. ![]() |
||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||
Сыроежка |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 24.6.2011 Репутация: 1 Всего: 1 |
Вынесете ересь! Почитайте в стандарте определение программы, строго соответсвтующей стандарту, и должна ли она выполняться на любой платформе. Вы даже этого определения из стандарта не знаете, а пытаетесь о чем-то рассуждать. Если следовать вашей логике, то стандарт вообще никакого смысла не имеет, так как есть различные платформы, которые. как говорится, что хотят, то и творят.
Это не мои домыфслы, а это ваше полное не знание стандарта языков программирования С и С++! Вы даже не знаете, как я уже написал выше, определение строгогго соответсвия программы стандарту! У вас не только IBM под рукой нет, нол ук вас и знаний С и С++ нет, но тем не менее вы свое невежество пытаетесь поставить выше стандарта. И потом, я вам уже ясно сказал, что если на одной платформе обращение к памяти, не выравненной по границе типа данного заканчивается аварийно, а на друцгой нет, то это никак не связан, как вы наивно думаете, с платформами, а это связано с тем, что 1) код некорректный; 2) вы совершенно не знаете С и С++. И это никак не свуязано с особенностями платформ, как вы наивно думаете! Иначе бы просто С, как языка, не существаовало. Не догадываетесь, почему? Попробутй догадаться с трех раз! Не догадались? Я вам подскажу: тогда бы поведение программ было совершенно не предсказуемыма! Однако, как вам это не покажется странным, это на самом деле не так! Я для IBM mainframe писал программы на Visual C++, так как у меня под рукой тоже не было IBM mainframe. И тем не менее код, написанный на Visual C++ без единой ошибке исполнялся на IBM mainframe, когда я его пересылал по электронной почте. Извините, но далее ваш бред мне просто не интересно читать! |
||||
|
|||||
xvr |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Ссылку из стандарта - на бочку! Это уже наглость, причем безмерная.
Мое терпение закончилось. Или вы предоставляете ссылки на пункты стандарта, о которых вы тут говорите, или получаете от меня предупреждение за наезды и клевету. Это уже 100% бред. Причем ничем не подкрепленный, кроме ваших слов, которым уже веры нет. |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Сыроежка, чтоб долго не спорить, выделю главнoе : стандарт не определяет значений, а лишь определяет требования/правила.. так если по стандарту данные должны быть выровнены, то на сколько определяет платформа.. т.е. на платформе с выравниваением для int равным 1, код из первых постов, который у Вас вызывает отвращение, вполне корректный.. А чтоб он не был ill-formed на других платформах, можно добавить ограничения.. например зa'ifdef`ить ..
![]() если ж, конечно, таковое требуется, так как есть множество кода, который по инным причинам не может быть "воспроизведен" на других платформах.. Вы можете опровергнуть, если приведете выдержку из стандарта, показывающую, что выравнивание (пусть для int) не может быть равно 1. ![]() ![]() Это сообщение отредактировал(а) mes - 8.7.2011, 08:38 |
|||
|
||||
borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
такая программа соответствует стандарту ?
а ведь она даже не будет компилироваться на платформе, где нет windows, однако на windows-платформе - абсолютно корректная и выполняющая все требования стандарта... нет ? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Мы тут все были потрясены опросом, устроенным нашим 'Гуру от Стандарта', где он потребовал от нас сокровенных знаний о существовании знакового чара и умопомрачительных тонкостей взаимодействия автоматического приведения типов и, страшно сказать, integer promotion. Я лично до сих пор бьюсь в истерике, от того, что не смог справится с этим невообразимо сложным заданием
![]() ![]() Что бы хоть как то загладить свою вину, я специально набросал небольшой квест. Я думаю, что для такого знатока стандарта, как Сыроежка, он будет не более, чем легкой разминкой перед завтраком. Квест тут ![]() Если уважаемый Учитель Сыроежка справится с этим квестом, я торжественно клянусь ![]() ![]() А если не справится, то придется лишить Сыроежку звания Гуру и Учителя и забанить за необоснованные наезды на участников, и за выдачу своего личного мнения (причем ошибочного) за стандарт С++ ![]() |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
ммм.. достаточно просто ответить на вопросы или аргументироватьцитатами из стандарта.. ? что то мне подсказывает, что квест Вы выбрали достаточно простой... |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
я вас сильно разочарую: сыроежка больше не появится
![]() |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
||||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
обычно так и бывает... ну не знаю почему...самомнение зашкаливает при провоцировании ситуации, и не позволяет признать что-то когда приходит время отвечать за слова... |
|||
|
||||
Сыроежка |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 24.6.2011 Репутация: 1 Всего: 1 |
А причем здесь С или С++? Вы вообще=то сами понимаете, что пишите? Вы обращаетесь к службам операционной системы. Ни С, ни С++ никакой ответсвенности за использование системно-зависимых вызовов ответсвенность не несет! Ни в С, ни в С++ не определяются такие функции! Так что ваш пример крайне глупый! |
|||
|
||||
Сыроежка |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 24.6.2011 Репутация: 1 Всего: 1 |
Мне надоело толочь в ступе одно и тоже, с теми, кто совершенно не разбирается в С/С++, и тем более в Java, на который здесь пытаются ссылаться.
Поэтому сделаю заключительное пояснение. Язык С/С++ совместим на разых платформах и переносим! То есть поведение С/С++ предсказуемо и определено согласно абстрактной вычислительной машины, описанной в стандарте. То есть если вы не используете в программе системо-зависимых средств, то никаких проблем у вас не будет. Несовместим не язык, как тут по недопониманию заявляют некоторые, а несовместимы платформы между собой! А это совершенно разные вещи. Например, на одной платформе размер целого числа может составлять 16 бит, на другой 32-бита, на третьей 64 бита, и т.д. Язык Java ни тем не лучше С/С++ в лане переносимости. То есть язык Java не имеет отношение к переносимости. Что на самом деле сделали разработчики Java? Они создали абстрактную виртуальную платформу! А уж затем поверх этой абстрактной виртуальной платформы наклеили Java. Точно с таким же успехом поверх этой виртуальной абстрактной платформы можно наклеить любой язык,как, например, Бейсик, Паскаль и тот же самый С/С++. Так что ссылаться на язык Java и говорить о какой-то переносимости языка - это некорректно! Здесь роль играет не сам язык, а та абстрактная виртуальная платформа, поверх которой язык реализуется. Кто-нибудь задумывался, почему поверх этой абстрактной виртуальной платформы поместили некий новый язык под названием Java, а не тот же самый С или С++? Дело в том, что назначение С/С++ вполне конкретное, и этот (эти) языки занимают свою нишу, которую никто другой занять не может. Язык С - это по сути дела универсальный ассемблер для любой платформы с мнемоникой более высокогот уровня, чем у ассемблеров конкретной платформы. Именно это роль С играет. Его синтаксис очень спартанский, он эффективный, порой его объектный код ничем не уступает аналогичному коду, написанному на ассемблере. В этом и состот миссия этого языка. Поэтому, например, Страуструп очень строго следит, чтобы нововведения в язык С++ не делали его менее эффективным, чем язык С. Многие предложения по стандартизации языка С++ были отклонены Страустропом, именно исходя из ссображений, что эти предложения снижали эффективность языка. Поэтому язык С/С++ приближен к особенностям различных платформ, то есть он позволяет различным платформам "внедряться" в язык С/С++. Что имеется в виду? Главное, это то, что языки С/С++ оставляют открытым вопрос о размере целочисленных типов. Единственное, что четко прописано, это то, что типы char(s) должны занимать один байт. Но при этом даже байт не обязан состоять из 8 битов, а может состоять из 9 битов. Для представлянеия в памяти целых чисел могут использоваться различные форматы, а не только дополнение до 2. Может быть и дополнение до 1, и другой формат, когда представления отрицательных и положительных сичел отличается лишь битовым знаком. Более тогог, представления целых чисел может содержать пустоты! То есть язык С/С++ оставляет открытыми двери для особеностей той или иной платформы. Но тем не менее семантика языка, его требования к поведению кода четко прописаны. И с этой точки зрения, если ваш код не опирается на системно-зависящие вещи, полностью переносим. А иначе и быть просто не может! В противном случае мы имели бы столько языков С, сколько существует платформ, и каждый язык имел бы свой синтаксис и свою семантику. Я не спроста приводил пример, что я на Visual C++ писал код для IBM mainftame, и этот код без каких-дибо изменений выполнялся так, как и предполагалось, когда он писался на Visual C++. Почему? Потому что, во-первых, и там, и там была 32-битовая система, и код не использовал каких-то системно-зависимых вызовов. С/С++ предполагают, что целые числа выравнены в соответсвии с кратностью их размеров. Почему это не прописано? Да просто потому, что стандарт не определяет размеры целых чисел. Он лишь определяет их ранги относительно друг друга. Кроме того сами стандарты несовершенно и постоянно редактируются. Так что это обычное дело для стандарта, если что-то четко не прописано. ВЫ можете послать свои предложенияч по уточнению стандарта в комитет по стандартизации. |
|||
|
||||
xvr |
|
||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Мания величия в очень запущенной форме. Пациенту рекомендуется бан на форуме, пока не остынет ![]() Угу, 'абстрактный конь в вакууме' ![]()
Вы не думали в политику пойти? Или в журналисты? Так перевернуть все с ног на голову - это надо иметь талант ![]()
Спасибо, о Великий Гуру! Как же мы раньше жили без столь великого знания!
Видимо не будет ![]()
![]() Демагог наш великий. Вы очень изящно заменяете задаваемые вам вопросы на другие, на которые и отвечаете (абсолютно правильно и последовательно, хотя и нафиг никому не нужно). Выдаете свое (порой ошибочное) мнение за стандарт, с формулировкой "Я ТАК СКАЗАЛ! Не нравится - ищите в стандарте сами". Любых несогласных с вами объявляете неучами, и отправляете учить стандарт ![]() Когда вас ткнут носом (с примерами и ссылками на тот самый стандарт) в неувязки в вашей демагогии, вы объявляете виноватыми в узости мышления, незнании стандарта и прочих смертных грехах того, кто вас ткнул. Я все еще жду от вас ссылки на стандарт, и ответов на квест в соседней теме, который я создал СПЕЦИАЛЬНО ДЛЯ ВАС! Иначе я считаю вас троллем с всеми вытекающими последствиями |
||||||||||
|
|||||||||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
а если использую - будут? очень интересно для чего тогда создаются расширения языка, intrinsic-и, поддержка inline assembler-а, платформозависимые библиотеки? Это все создается затем, чтобы у нас были проблемы? Стандарт - как бы ты его не любил, это не пуп земли и вокруг него мир программиста C++ не вертится. Стандарт многое оставляет на усмотрение компилятора и основываясь на гарантиях конкретного компилятора я могу писать платформозависимый код на C++ и мне откровенно говорю до уличного осветительного прибора чье либо одобрение. Писать платформозависимый код там, где не нужна переносимость - это вполне нормально. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |