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

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

05.06.2009, 23:53. Показов 14955. Ответов 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
Ответ Создать тему
Новые блоги и статьи
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
сукцессия 9. Математика подлости: как растения предали грибных друзей
anaschu 27.06.2026
Статья 2. Глобальная фосфорная война: эволюционно-экономические механизмы распределения биомов Земли Введение: Экологический рынок как игра с нулевой суммой Традиционная экология долгое время. . .
сукцессия 8. Как я спорил с ИИ, которые - агенты растений и ненавистники грибов!
anaschu 27.06.2026
Статья 1. Хроники грибного восстания: как Сократов диалог разрушил академические догмы ИИ Введение: Синдром «цифрового учебника» Современные большие языковые модели (LLM) обладают колоссальным. . .
Главный вопрос моделирования сукцессии
anaschu 27.06.2026
главный вопрос. Если эктомикориза лучше добывает недоступный фосфор. И ее масса максимальна из всех. А широколиственный лес тоже имеет самую крутую биомассу. То почему не возникло их симбиоза? Это. . .
сукцессия 6. Питон реализация энилоджиковской модели, картинка про Центральную часть будущей модели
anaschu 26.06.2026
Етить. ИИ мне на основе моего старого файла R создал вот эту вот хмерь на пайтоне. Это уже новая модель, модель сукцессии грибной. потоки фосфора, азота. Углерода. 5 видов организмов. Я даже. . .
Как замкнутый ядерный цикл решит проблему недостатки фосфора? Био миграция фосфора со дна океана
anaschu 26.06.2026
Биологический лифт: Концепция подъема фосфора со дна океана с помощью ЗЯТЦ Предлагаю на обсуждение альтернативу тяжелому промышленному бурению океанического дна. Вместо сложной инженерии мы можем. . .
сукцессия 5
anaschu 26.06.2026
ПЛАН РАЗРАБОТКИ математической модели сукцессии микоризных систем Переход AM → EcM (Endo + ErM) · Шумилов А. С. · ИФХиБПП РАН · Пущино · 2026 . . .
сукцессия 4
anaschu 25.06.2026
Более детализированный план разработки План доработки модели динамики микоризных симбиозов (EcM с гистерезисом) Цель: Реализовать логику переключения между эрикоидным (ErM) и эктомикоризным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru