Временно недоступен
 Аватар для #pragma
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926

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

05.06.2009, 23:53. Показов 14820. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов, содержащихся в реализации модуля. По-умолчанию все члены модуля доступны: module Foo let x = 10 let boo () = printfn "boo" . . .
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru