Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2019, 10:42   #1
Korshi
Пользователь
 
Регистрация: 30.04.2019
Сообщений: 44
По умолчанию Может ли измениться номер ошибки?

Добрый день! Может ли измениться номер ошибки?

Например, сейчас под номером 53 ошибка "ERROR_BAD_NETPATH".
Может ли в будущем под номером 53 быть другая ошибка? Или это исключено?

API-функции сделаны специально для C++ и в самом C++ может быть номера ошибок не используются, а используются имена ошибок (например "ERROR_BAD_NETPATH") и такого сбоя не будет.
А как быть в других языках программирования, где используются только номера ошибок?
Korshi вне форума Ответить с цитированием
Старый 01.05.2019, 11:14   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от Korshi Посмотреть сообщение
Может ли измениться номер ошибки?
Чисто теоретически законов природы, которые могут этому помешать нет, но, в Винде все очень сильно заточено на обратную совместимость, так что можете не беспокоиться на этот счет.

Цитата:
Сообщение от Korshi Посмотреть сообщение
API-функции сделаны специально для C++
Нет, API это API и язык здесь ни причем.
В языке С++ нет "имен" ошибок. ERROR_BAD_NETPATH - это константа, чтоб заклавиатурному устройству было легче.
waleri вне форума Ответить с цитированием
Старый 01.05.2019, 11:21   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну смотря в каком будущем, когда-то может и это вин32апи перестанет существовать в новых версиях ОС )

Цитата:
Сообщение от Korshi Посмотреть сообщение
API-функции сделаны специально для C++
С.


Цитата:
Сообщение от Korshi Посмотреть сообщение
используются имена ошибок (например "ERROR_BAD_NETPATH") и такого сбоя не будет
это просто дефайн в хедере.
Будет если не пересобрать программу, и тогда она не будет работать в старых версиях.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 01.05.2019, 12:06   #4
Korshi
Пользователь
 
Регистрация: 30.04.2019
Сообщений: 44
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
ERROR_BAD_NETPATH - это константа, чтоб заклавиатурному устройству было легче.
Не важно, как это называется. Смысл в том, что C++ программист может не указывать номер ошибки, а укажет константу. Затем разработчики из майкрософта присвояет константе новое число, и программа будет правильно работать.
А если я пишу программу не на C++, у меня то же число и останется.
Korshi вне форума Ответить с цитированием
Старый 01.05.2019, 12:11   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Korshi Посмотреть сообщение
Затем разработчики из майкрософта присвояет константе новое число, и программа будет правильно работать.
Нет.
Я же говорю, число не в рантайме берется.
Они сломают все существующие программы (бинарники) если так сделают, разработчикам надо будет пересобирать программы и иметь отдельные сборки под старые и новые версии.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 01.05.2019, 12:13   #6
Korshi
Пользователь
 
Регистрация: 30.04.2019
Сообщений: 44
По умолчанию

Всё, понял, значит точно номера ошибок не изменятся, т.к. тогда перестанут работать все существующие программы.
Korshi вне форума Ответить с цитированием
Старый 01.05.2019, 12:23   #7
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от Korshi Посмотреть сообщение
А если я пишу программу не на C++
Бред.
Во первых, даже если пишете на С++ никто не заставляет вас использовать константу - пишите себе 53 в коде на здоровье.
Во вторых, понятие "константа" есть в любом маломальски нормальном языке, вплоть до ассемблера, так что если следовать вашей логике, проблема потенциального изменения константы есть во всех языках.
waleri вне форума Ответить с цитированием
Старый 03.05.2019, 12:41   #8
taras-proger77
Заблокирован
 
Регистрация: 17.12.2018
Сообщений: 514
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
ERROR_BAD_NETPATH - это константа,
Бред. ERROR_BAD_NETPATH – это макрос. В отличие от констант, у него нет ни типа, ни адреса, он просто подставляется по значению на этапе компиляции.

Цитата:
Сообщение от waleri Посмотреть сообщение
о первых, даже если пишете на С++ никто не заставляет вас использовать константу - пишите себе 53 в коде на здоровье.
Во вторых, понятие "константа" есть в любом маломальски нормальном языке, вплоть до ассемблера, так что если следовать вашей логике, проблема потенциального изменения константы есть во всех языках.
Вот только на паскале константа – это типизированное и именованное значение, подставляемое на этапе компиляции, а на c/c++ константа – это типизированная и именованная, но защищённая от изменения величина, к которой можно обращаться как с переменной за исключением передачи её по не константной ссылке и операций, меняющих её значение. Можно даже взять на неё указатель. Причём, если его привести к указателю на переменную, то можно без толку пытаться изменить значение самой константы. Она и не изменится, и компилятор ничего не скажет. А на паскале так нельзя. Это во-первых. А во-вторых константы здесь вообще не причём.

Цитата:
Сообщение от Korshi Посмотреть сообщение
Всё, понял, значит точно номера ошибок не изменятся, т.к. тогда перестанут работать все существующие программы.
А разве они этого не добиваются? Но будет доказательство их вины в глюках, а вот этого они действительно боятся до такой степени, что даже ошибки таскают за собой, если эти ошибки кто-то успел учесть в своих приладах, из-за чего те стали падать без этих ошибок.

Последний раз редактировалось Alex11223; 03.05.2019 в 14:07.
taras-proger77 вне форума Ответить с цитированием
Старый 03.05.2019, 14:06   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от taras-proger77 Посмотреть сообщение
В отличие от констант, у него нет ни типа, ни адреса, он просто подставляется по значению на этапе компиляции.
и? что это меняет тут?

Цитата:
Сообщение от taras-proger77 Посмотреть сообщение
А разве они этого не добиваются?
ну из-за номеров пары ошибок может ничего сильно страшного не случится, но в целом винда жива во многом благодаря совместимости с чисто виндовым ПО, без нее многие на линуксы и т.п. уйдут.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 03.05.2019, 14:35   #10
taras-proger77
Заблокирован
 
Регистрация: 17.12.2018
Сообщений: 514
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
и? что это меняет тут?
Много чего. Навскидку:
1. На нём не экономят даже при разработке под сигнальные процессоры. Не известно, на сколько ТС озабочен памятью, константу он может и отвернуть.
2. На него нельзя взять ни ссылку, ни указатель, в том числе, для передачи функциям. Не известно, как и куда ТС захочет передать номер ошибки для сравнения с фактическим номером. Если он захочет передавать по ссылке, то ему придётся завести специальную переменную и присвоить ей макрос.
3. Макрос можно использовать в операторе case. А константу – нельзя. На этом основании ТС может константу отвергнуть.
taras-proger77 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Windows XP код ошибки номер 4 Dirol007 Windows 3 20.09.2018 15:21
вроде бы все верно, но мелодия почему то не играет, ошибки не выдает, что может быть не так? vasypu C# (си шарп) 3 02.09.2018 11:40
Написать функции, изменяющие значение определенного разряда восьмибитного числа на 1 и на 0 (остальные разряды измениться не должны). Номер разряда передается в качестве аргумента. Nadia M Помощь студентам 5 15.04.2018 11:40
Кто может исправить ошибки в скрипте? Взамен вам же и останется этот скрипт. lkivaka PHP 3 28.10.2017 23:09
Програма не может найти тип данных, ошибки Ladanua C# (си шарп) 11 18.06.2011 23:40