Форум программистов, компьютерный форум CyberForum.ru

Приведите 10 примеров непереносимого кода - C++

Войти
Восстановить пароль
Регистрация
Другие темы раздела
C++ контроллер видеомагнитофона http://www.cyberforum.ru/cpp-beginners/thread38555.html
как исправить класс для представления понятия "контроллер видеомагнитофона"(обеспечивает програмное управление видеомагнитофоном, который может осуществлять запись,вставить, извлечь кассету и проверить наличие кассеты, выполнять воспроизведение кассеты и осуществлть перемотку в указанном направлении что бы выводил на экран всё что надо как и что выводить в поток cout magnitofon.h #ifndef...
C++ Вычисления значений функции на отрезке [a; b] с шагом h Составить программу вычисления значений функции F(x) на отрезке с шагом h . Результат представить в виде таблицы, первый столбец которой – значения аргумента, второй – соответствующие значения функции: F(x) = sin2 x − cos 2 x . http://www.cyberforum.ru/cpp-beginners/thread38552.html
Определить колличество строк, не содержащих ни одного нулевого элемента C++
Помогите плз) чтобы получить итоговую нужно сдать 3 проги по С++. Сделать их сам не могу( не было на этих темах, парился в военкомате, по поводу отсрочки, будь она не ладна( Спасайте) Осталось 2 дня, чем быстрее будет решение, тем лучше, хоть как-то разберусь с прогами мб. 1) Дана целочисленная прямоугольная матрица. Определить колличество строк, не содержащих ни одного нулевого...
C++ Найти индекс первого элемента массива, модуль которого меньше всего отличается от 5
Найти элементы , модуль которого меньше всего отличается от 5 , номер первого такого элемента. Найти числа которые имеют наибольший остаток при делении на 5 и сообщ этот остаток.
C++ Сравнить члены вектора http://www.cyberforum.ru/cpp-beginners/thread38473.html
Как сравнивать члены вектора между собой? Например дан вектор: 000101010 Надо сравнить тройками чисел,т.е. 1-я тройка: 000 ->три 0 выводим 0 2-я тройка 101 -> две 1 и 0 выводим 1 3-я тройка 010-> два 0 и 1 выводим 0
C++ Числовой интервал Помогите плз, такая задача. Задан числовой интервал, вывести все простые числа и их кол-во. (интервал любой) подробнее

Показать сообщение отдельно
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16941 / 5346 / 328
Регистрация: 30.03.2009
Сообщений: 14,372
Записей в блоге: 26
08.06.2009, 12:29     Приведите 10 примеров непереносимого кода
Цитата Сообщение от CheshireCat Посмотреть сообщение
Непереносимый код должен использовать не трактовку приоритетов операций в различных ситуациях (поскольку она будет одинаковой для одного и того же выражения независимо от компилятора и платформы - если компилятор, конечно, более-менее соответствует Стандарту), а - использовать платформенно-зависимые фичи и/или функции или компиляторо-зависимые фичи реализации. Например, то, что в MSDN явно описано как "Microsoft-specific".
В общем так. Изначально речь шла о примерах непереносимого кода. Далее pragma привёл код, который ему казался непереносимым. Я на это сказал, что там всё по стандарту, а так же сказал, что приоритет операций в стандарте жёстко зафиксирован. Собственно в этом месте была моя ошибка, поскольку мне казалось, что применительно к выражениям в Си и Си++ различиё в стандарте нет. Оказалось, что в Си++ в этом месте стандарт работает по-другому. Т.е. с приоритетмами операций, насколько я понимаю, к консенсусу мы всё-таки пришли

Теперь по поводу изначальной постановки задачи. Возможно, что тут дело в терминологии, но на мой взгляд "непереносимый код" и "ОС-зависимый" ("CPU-зависимый") код - это всё-таки разные вещи, юридической различие между которыми я членораздельно объяснить не могу (из разряды "жо$ой чую, что литр, но доказать не могу"). Т.е. условно говоря, попытавшись перетащить линуховый код на винду, мы получим ошибку компиляции/линковки по причине того, что какая-то фича для данной ОС отсуствует.

На мой взгляд, говорить о непереносимости можно тогда, когда у тебя нет физических проблем для переноса кода (например, с linux-i386 на linux-ia64 или linux-sparc). И именно в этом месте на реальном софте возникает куча гемора:
- Код изначально был написан под 32-битную платформу, а потому на 64-битной платформе работает неправильно. Не потому, что он физически не можетработаь на 64-битной платформе, а птому что написан "неаккуратно" - т.е. в предположении неких 32-битных соглашений (например, размер int'а совпадает с размером указателя)
- Код изначально был написан под little-endian, а потому неправильно работает на big endian'е. Не потому, что он физически не может работатьна big-endian'е, а потому что шла работа с битовыми образами значений, жёстко предполагающих, что у нас такой-то порядок расположения байтов в памяти

Ну и тому подобное. Т.е. отсуствие чего-то в библиотеках на мой взгляд НЕ является непереносимостью, а является "ОС-зависимостью" и т.п.
 
Текущее время: 17:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru