Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.81/72: Рейтинг темы: голосов - 72, средняя оценка - 4.81
Временно недоступен
 Аватар для #pragma
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926

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

05.06.2009, 23:53. Показов 14310. Ответов 53
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача:
Приведите 10 различных примеров непереносимого кода на С++.
Ну первый пример сразу мне бросился в глаза,при регистрации на форуме.(Если я правильно понимаю смысл задачи)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <clocale>
#include <math.h>
using namespace std;
int main()
{
        system("Color 1A");
            ....... 
        if (choose == 1) {
            .......
                system("cls");
            .......
                if (choose1 == 1) {
                        system("cls");
            ......
                }
                if (choose1 == 2) {
                        system("cls");
            ......
                }
                if (choose1 == 3) {
            ......
                        system("pause");
                }
            ......
        }
        if (choose == 2) {
            ......
                system("pause");
        }
}
Помогите с девятью,благо(или нет) их должно быть море..
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.06.2009, 23:53
Ответы с готовыми решениями:

Приведите пару примеров использования QValidator
Всем привет! Приведите, пожалуйста, парочку примеров использования QValidator в Qt Creator. Применимо к textEdit желательно. Что-то...

Море примеров кода!
The Java Developers Almanac 1.4: http://javaalmanac.com/egs/index.html

приведите примеры программ питона (не кода)
слышал много где что если хочешь что то быстро написать пиши на питоне и пр. собственно интересны сами идеи, чего такого быстрого можно...

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

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

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

Ну и тому подобное. Т.е. отсуствие чего-то в библиотеках на мой взгляд НЕ является непереносимостью, а является "ОС-зависимостью" и т.п.
1
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
08.06.2009, 13:39
Хм, вот я глянул в (драфт) действующего стандарта С (ANSI/ISO 9899-1999), и там тоже (6.5/3) есть аналогичное утверждение: "The grouping of operators and operands is indicated by the syntax."
Ну хорошо, тем не менее, к консенсусу о приоритетах операций мы все-таки пришли.

Относительно переносимости:
я вполне согласен с твоими доводами. Я, однако, все-таки добавил бы в понятие "непереносимого" кода еще и то, что ты называешь "ОС-зависимость" или "CPU-зависимость". Бо мне в последнее время приходится писать код под несколько различных аппаратных платформ, и я (к сожалению) по опыту знаю, что такое "взять уже готовую библиотеку в исходниках и всунуть ее в свой проект" - это легко только на словах и так оно кажется менеджерам..... а перелопачивать груду кода этак в полста десятков килострок - удовольствие много ниже среднего, да еще и ошибок насажать можно лехко.....
Впрочем, все изложенное - это мое имхо, поэтому не настаиваю на своем утверждении. В остальном же консенсус достигнут
2
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
08.06.2009, 13:45
Почитал стандарт. В разделе 6.5 стандарта Си чётко описаны приоритеты всех операций. В Си++ прориоритеты нет ничего кроме фразы "The precedence of operators is not directly specified, but it can be derived from the syntax". Мы тут сидели и долго пытались втыкнуть, что же сие означает. Наткнулись на статью в википедии http://en.wikipedia.org/wiki/O... nd_C%2B%2B

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

Добавлено через 5 минут 31 секунду
Цитата Сообщение от CheshireCat Посмотреть сообщение
Я, однако, все-таки добавил бы в понятие "непереносимого" кода еще и то, что ты называешь "ОС-зависимость" или "CPU-зависимость". Бо мне в последнее время приходится писать код под несколько различных аппаратных платформ, и я (к сожалению) по опыту знаю, что такое "взять уже готовую библиотеку в исходниках и всунуть ее в свой проект"
Просто тут скорее из разряда "кривые руки", т.е. автор изначально не пытался написать код так, чтобы он мог работать на другой платформе. Неформально я бы тоже это назвал "непереносимый", хотя формально он "ОС-зависимый". В контексте реальной задачи по переносу кода на другую платформу, конечно же, в данном случае куда весомее оказывается неформальное название "непереносимый". В общем по данному пункту у нас полное взаимопонимание. А что и как назвать формально - это уже крючкотворство и буквоедство
2
инженер-системотехник
 Аватар для Haster
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
08.06.2009, 14:27
А чего ссылка ведет не на статью?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
08.06.2009, 21:29
Промазал. Ссылка
http://en.wikipedia.org/wiki/O... nd_C%2B%2B

Добавлено через 6 часов 55 минут 39 секунд
pragma, хорош на каждом посте "спасибо жать". А то я уже начинаю чувствовать, что где-то рядом штангенциркуль появляется
1
Временно недоступен
 Аватар для #pragma
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
08.06.2009, 22:26  [ТС]
А кто такой штангенциркуль?
P.S.Просто некоторые жалуются,что не жмут,вот и жму))
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
08.06.2009, 23:25
Цитата Сообщение от #pragma Посмотреть сообщение
А кто такой штангенциркуль?
P.S.Просто некоторые жалуются,что не жмут,вот и жму))
Штангенциркуль - это инструмент для измерения длины с точностью до 0.1 мм

Добавлено через 25 минут 50 секунд
Кстати, вот тебе ещё пример непереносимого кода

C
1
2
3
4
5
6
7
8
9
10
11
void func (void)
{
  int x, i;
  char *p;
 
  x = 0x11223344;
  p = (char*) &x;
 
  for (i = 0; i < 4; i++)
    printf ("0x%x\n", (int) p[i]);
}
В данном примере мы побайтно распечатываем значения int'а, лежащего в памяти. Есть два основных типа расположения байтов внутри значения в памяти:
- little endian - когда младший байт значения находится по меньшему адресу (а старший - по бОльшему)
- big endian - когда старщий байт значения находится по меньшему адресу

Intel относится к little endian, а потому этот тест выдаст значения в таком порядке: 0x44, 0x33, 0x22, 0x11. SPARC (есть такой процессор) относится в big endian, и этот тест выдаст: 0x11, 0x22, 0x33, 0x44
1
UNIX-way
 Аватар для Delphin_KKC
712 / 495 / 49
Регистрация: 15.01.2009
Сообщений: 1,720
09.06.2009, 17:57
Вот пример:
C++
1
2
3
4
5
6
7
8
9
10
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    system("PAUSE");
    return EXIT_SUCCESS;
}
Как выяснилось, на linux образца 2006 года и gcc-4.1.2 сей код не компилируется.
Подробности тут: Сайт для экспериментов с программами (Интерпретатор онлайн)
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
09.06.2009, 18:01
Цитата Сообщение от Delphin_KKC Посмотреть сообщение
Как выяснилось, на linux образца 2006 года и gcc-4.1.2 сей код не компилируется.
Почитай внимательнее данный топ. Ты уже далеко не первый, кто предлагает этот код. И вроде бы как собрание акционеров порешило, что этот код "ОС-зависимый", а не "непереносимый". На том сайте ты его не смог запустить потому, что там стоИт ограничение на некоторые системные вызовы, чтобы всякие умники машину не поломали. Более того, если ты будешь его запускать на реальной машине, а не через сайт, то ты всегда сможешь положить бинарник с именем pause и твой код заработает
1
UNIX-way
 Аватар для Delphin_KKC
712 / 495 / 49
Регистрация: 15.01.2009
Сообщений: 1,720
09.06.2009, 18:04
Понятно. Извини, не было времени пять страниц изучать. Спасибо за информацию.
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
09.06.2009, 18:48
Цитата Сообщение от Delphin_KKC Посмотреть сообщение
Как выяснилось, на linux образца 2006 года и gcc-4.1.2 сей код не компилируется.
На Lin 2.6.26 образца 2009 г. (весна) и GCC 4.3.0 все прекрасно компилируется.
А причина в том посте - не в компиляции, а в другом.
0
UNIX-way
 Аватар для Delphin_KKC
712 / 495 / 49
Регистрация: 15.01.2009
Сообщений: 1,720
09.06.2009, 21:15
Цитата Сообщение от CheshireCat Посмотреть сообщение
...
А причина в том посте - не в компиляции, а в другом.
Причина в том, что я его не на своём компе на линуксе проверял, а на сайте http://codepad.org/
Evg уже писал что там стоит ограничение на некоторые системные вызовы. В часности - system("pause"). Без этого вызова - компилируется. За сим, как я уже писал, признаю свою ошибку. Но пост удалить нельзя.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
09.06.2009, 21:33
Цитата Сообщение от Delphin_KKC Посмотреть сообщение
Причина в том, что я его не на своём компе на линуксе проверял, а на сайте http://codepad.org/
Evg уже писал что там стоит ограничение на некоторые системные вызовы. В часности - system("pause"). Без этого вызова - компилируется. За сим, как я уже писал, признаю свою ошибку. Но пост удалить нельзя.
CheshireCat имел в виду, что оно и с system компилируется. Но не исполняется
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
17.09.2019, 11:01
Ещё один случай - это наличие возможности работы по невыровненному адресу на конкретном процессоре. Пример тут: Сравнение строк в операторе Switch, пояснение тут: Сравнение строк в операторе Switch
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.09.2019, 11:01
Помогаю со студенческими работами здесь

В чем разница двух примеров кода
Здравствуйте! while (Connected == true) { if (srReceiver.ReadLine() != &quot;&quot;) { ...

Приведите примеры кода с комментариями (asm или debug)
1. Вывести на экран текст 2. Рассчитать сумму всех элементов массива 3. Найти минимальный элемент массива 4. Найти максимальный...

приведите пример
мне подсказали, как составить программу, но не могу 8( приведите пример хоть на языке C#, пожалуйста Вот алгоритм: 1) составить...

Приведите пример.
Программа с использованием функции без параметров. Можете разьяснить все как есть

Приведите пример
С арифметическими операциями и управляющими операторами(цикл for) над примитивными типами данных


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
54
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru