|
24 / 24 / 5
Регистрация: 04.04.2012
Сообщений: 107
|
|
Кто отвечает за корректность аргументов функции?22.07.2019, 19:23. Показов 6153. Ответов 72
Вопрос к знатокам стандарта или просто ведующим.
В языке c за корректность аргументов обычно отвечает вызывающая сторона. Т.е. если ты вызываешь printf("%d", some_int) и подставляешь туда нечто не int, то это твои проблемы потом удивляться, недоумевать или возмущаться на некорректный вывод или уход в даун. А с++ какая практика?
1
|
|
| 22.07.2019, 19:23 | |
|
Ответы с готовыми решениями:
72
Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? Странное расположение в памяти аргументов функции с неизвестным количество аргументов
|
|
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
|
|
| 22.07.2019, 19:26 | |
|
Отвечает тоже вызывающая сторона, но автор функции должен так разработать ее интерфейс, чтобы некорректные аргументы было сложно подставить. Ну и, конечно, первыми операторами должны идти всевозможные проверки корректности аргументов с заменой неверных дефолтными значениями либо выбросом исключений.
1
|
|
|
24 / 24 / 5
Регистрация: 04.04.2012
Сообщений: 107
|
|
| 22.07.2019, 19:33 [ТС] | |
|
0
|
|
|
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
|
||
| 22.07.2019, 19:40 | ||
|
0
|
||
|
24 / 24 / 5
Регистрация: 04.04.2012
Сообщений: 107
|
|
| 22.07.2019, 19:54 [ТС] | |
|
0
|
|
|
Комп_Оратор)
|
||
| 22.07.2019, 20:47 | ||
|
А в сях есть запись в стандарте об ответственности и проверках передаваемых аргументов?
0
|
||
|
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
|
|||
| 22.07.2019, 20:53 | |||
|
Добавлено через 5 минут
0
|
|||
|
|
||
| 22.07.2019, 21:00 | ||
|
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 22.07.2019, 21:08 | |||||||
|
и это не зависит от языка. есть такое понятие "инвариант". это - способность функции сохранять работоспособность независимо от корректности вызывающей стороны. хороший код - инвариантен. принцип простой: все входящие аргументы должны быть проверены. если аргументы не корректны, необходимо уведомить об этом вызывающую сторону. что касается сишки: существуют кейсы, когда инвариант попросту не возможен. например: printf, или классика жанра:
не всегда есть возможность проверить аргументы. но если есть возможность обеспечить инвариант - его нужно обеспечить.
2
|
|||||||
|
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
|
|||||||
| 22.07.2019, 21:15 | |||||||
0
|
|||||||
|
Комп_Оратор)
|
||||
| 22.07.2019, 21:49 | ||||
|
Холивар, имхо.
0
|
||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
| 22.07.2019, 22:27 | ||||||
|
вообще, судя по твоей реакции ты не в теме. ты знаешь, что такое assert, и зачем он нужен? инкапсуляция - характеристика компонента (функции/класса/библиотеки/модуля/etc), которая характеризует степень независимости деталей внутренней реализации от внешнего мира. хороший код - инкапсулированый. хорошая функция ничего не знает, и не должна знать о внешнем мире. когда верхние и нижние этажи пишутся с оглядкой друг на друга - это говнокод.
0
|
||||||
|
24 / 24 / 5
Регистрация: 04.04.2012
Сообщений: 107
|
|
| 22.07.2019, 22:32 [ТС] | |
|
Я за вариант корректность аргументов дело того кто использует, а не того кто пишет почти на 100%.
Просто есть максималисты ну типа см. выше. И доводы что обычно проверок и так хватает и проверять еще и аргументы значит еще более все усложнять не работают. Вот я подумал может есть какой то гуру или указание стандарта на который можно сослаться.
0
|
|
|
Комп_Оратор)
|
|||||
| 22.07.2019, 22:57 | |||||
|
И всё же, решать разработчику, что ему выбрать. Делать код который будет падать/бросать исключения при отладке и тестировании, до тех пор пока не будут устранены причины. Либо делать код который будет тихо поедать всё что ему скармливают. Сроки, деньги и доступные ресурсы не последний аргумент. Проще всего идти по второму пути. Я не спорю. Но это не самый быстрый вариант. Добавлено через 4 минуты Добавлено через 6 минут
0
|
|||||
|
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
|
|||
| 22.07.2019, 23:06 | |||
|
Добавлено через 3 минуты
0
|
|||
|
Комп_Оратор)
|
||
| 22.07.2019, 23:08 | ||
|
jugu, я не спорю о том, что как рекомендация, это имеет право на жизнь. Я говорил о том, что не существует способа написать такое требование задав точные границы. То есть, оно не может быть частью разумного стандарта.
0
|
||
|
Неэпический
|
||
| 22.07.2019, 23:10 | ||
|
В угоду производительности, проверку аргументов многие функции стандартной библиотеки не производят.
1
|
||
|
24 / 24 / 5
Регистрация: 04.04.2012
Сообщений: 107
|
|
| 22.07.2019, 23:12 [ТС] | |
|
1
|
|
|
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
|
|||||||
| 22.07.2019, 23:17 | |||||||
errno и т. д.).
0
|
|||||||
| 22.07.2019, 23:18 | |
|
0
|
|
| 22.07.2019, 23:18 | |
|
Помогаю со студенческими работами здесь
20
Кто отвечает на форумах? Чат не отвечает, пока кто-либо не подключится
Вычислить значение функции и вывести на печать значения функции и аргументов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. На мобильном - сканируйте QR-код. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|