Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Идеология С++ и warnings
|
|||
|---|---|---|---|
|
#18+
Насколько я понимаю, идеология С++ гласит, что в ошибочных ситуациях из функций должны выкидываться исключения, которые потом ловятся и обрабатываются. А что делать с предупреждениями? Неужели, как и в С, проверять их наличие после каждого вызова? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2015, 14:34 |
|
||
|
Идеология С++ и warnings
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, чем отличаются предупреждения от ошибок, на твой взгляд? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2015, 15:25 |
|
||
|
Идеология С++ и warnings
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНасколько я понимаю, идеология С++ гласит, что в ошибочных ситуациях из функций должны выкидываться исключения, которые потом ловятся и обрабатываются. А что делать с предупреждениями? Неужели, как и в С, проверять их наличие после каждого вызова? Нет никакой единой идеологии С++. Кто не хочет, может не использовать исключения. То же самое с классами и шаблонами. В этом и суть мультипарадигменности С++. Касательно того в каких случаях бросать исключения а в каких возвращать код, то по этой теме столько же мнений сколько людей )) Я лично применяю такой подход. Если задача функции выполнить некое действие, то она бросает исключение если не смогла его выполнить. Если же задача - произвести проверку, то результат проверки возвращается кодом (bool, int). Понятно что второе это частный случай первого. Если проверку не удалось произвести то бросается исключение. Никакого деления на ошибки и предупреждения не требуется. Предупреждения просто логируются и не влияют на ход выполнения алгоритма. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2015, 15:38 |
|
||
|
Идеология С++ и warnings
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНасколько я понимаю, идеология С++ гласит, что в ошибочных ситуациях из функций должны выкидываться исключения, которые потом ловятся и обрабатываются. В С++ нет какой-то общей идеологии. В каждом API или библиотеке программисты сами договариваются и устанавливают себе стандарты поведения. Но если это действительно функция (не void) и ей дейтвительно нечего вернуть, (как например при делении на 0), то да, в таких ситуациях очень правильно выкидывать исключение. Dimitry Sibiryakov А что делать с предупреждениями? Неужели, как и в С, проверять их наличие после каждого вызова? Какие предупреждения ты имеешь в виду ? Во время компиляции которые ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2015, 16:13 |
|
||
|
Идеология С++ и warnings
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovпроверять их наличие после каждого вызова? Не понял о чём Дмитрий толкует. Что можно проверять после каждого вызова? Это что Ассемблер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2015, 16:52 |
|
||
|
Идеология С++ и warnings
|
|||
|---|---|---|---|
|
#18+
MasterZivКакие предупреждения ты имеешь в виду ? Вот, например, ODBC API. К нему есть некоторая обёртка. Для простого SQL_ERROR эта обёртка, ясное дело, выкидывает исключение с текстом ошибки внутри. Обработка SQL_SUCCESS - тоже простая вещь. А вот что делать когда функция ODBC возвращает SQL_SUCCESS_WITH_INFO - я в непонятках. Этот код возвращается в куче ситуаций, причём в большинстве они специфичны для СУБД, то есть "generic" обработчик их невозможен. MS SQL, например, имеет привычку играть в КО и возвращать "информацию" типа "успешно соединились с базой такой-то". На другом конце палки - "предупреждение" типа "данные были усечены при доставке", игнорировать которое чревато боком. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2015, 19:43 |
|
||
|
Идеология С++ и warnings
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, "Информация" должна возвращаться явно, а ошибки - через исключения. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2015, 19:55 |
|
||
|
Идеология С++ и warnings
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky"Информация" должна возвращаться явно, а ошибки - через исключения. Тогда у функции придётся предусматривать два выхода, да ещё и проверять результат ри каждом вызове, а это "не С++ методы". Вот, например, метод Код: sql 1. Если ему прикручивать дополнительный статусный выход, получится коряво. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2015, 20:00 |
|
||
|
Идеология С++ и warnings
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovТогда у функции придётся предусматривать два выхода, да ещё и проверять результат ри каждом вызове, а это "не С++ методы". Зачем проверять при каждом вызове, если это не ошибки? Сделайте так чтобы можно было проверять по желанию. Вообще это надо решать в каждом случае отдельно. Например, Код: plaintext 1. Вместо string возвращайте обертку, которая неявно приводится к string и имеет метод для извлечения дополнительной инфы. Если юзер захочет проверку то он присвоит результат в тип обертки. А не захочет - сразу в строку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2015, 20:35 |
|
||
|
Идеология С++ и warnings
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovAnatoly Moskovsky"Информация" должна возвращаться явно, а ошибки - через исключения. Тогда у функции придётся предусматривать два выхода, да ещё и проверять результат ри каждом вызове, а это "не С++ методы". Вот, например, метод Код: sql 1. Если ему прикручивать дополнительный статусный выход, получится коряво. Самое простое: Код: sql 1. Но лучше: Anatoly Moskovsky Вместо string возвращайте обертку, которая неявно приводится к string и имеет метод для извлечения дополнительной инфы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2015, 22:35 |
|
||
|
Идеология С++ и warnings
|
|||
|---|---|---|---|
|
#18+
Иех вы.... люди ушибленные С++. Исключения это изначально дурная идея, не имеющая ни одного полезного свойства. В учебнике написано что исключения это здорово и вы поверили. А теперь пытаетесь с ними работать. Мне вас жаль. Но вы этого поста не поймете. Потому что верите учебникам и различным гуру от "С++ за 21 день" которые задурили вам головы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2015, 22:49 |
|
||
|
Идеология С++ и warnings
|
|||
|---|---|---|---|
|
#18+
Вася Уткинлучше Но возникает вопрос как узнать, что дополнительную инфу нужно получать. Простейший пример: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Ошибки сами прилетят в обработчик, а вот остальное. Не писать же дебильное Код: sql 1. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2015, 23:00 |
|
||
|
Идеология С++ и warnings
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovОшибки сами прилетят в обработчик, а вот остальное. Не писать же дебильное Код: sql 1. Вся проблема в том что вы зачем то вообще хотите возвращать эти предупреждения. А их надо обрабатывать прямо по месту их обнаружения (например путем логирования). Если от наличия предупреждения меняется нормальный ход программы, то это должно быть исключение. А если не меняется, то вызывающему коду вообще не нужно о них знать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2015, 23:52 |
|
||
|
Идеология С++ и warnings
|
|||
|---|---|---|---|
|
#18+
White Owl, Аминь. А теперь по делу давайте )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2015, 23:56 |
|
||
|
Идеология С++ и warnings
|
|||
|---|---|---|---|
|
#18+
Дополнительную информацию можно получать через событие. То есть при обращении к getAsString основную информацию получаем как возвращаемое значение. При этом возбуждается событие, и если мы на него подписаны - в обработчике юзаем дополнительную инфу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2015, 23:58 |
|
||
|
Идеология С++ и warnings
|
|||
|---|---|---|---|
|
#18+
А как из рекурсии наверх выскочить? Best practices. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 00:30 |
|
||
|
Идеология С++ и warnings
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyWhite Owl, Аминь. А теперь по делу давайте ))А это и было "по делу". Вся логика работы с ODBC изначально построена на кодах возврата. Прилеплять туда исключения это бессмысленное утяжеление. По хорошему такого вопроса как задал Дмитрий вообще возникать не должно. Любую логику, вообще любую, на любом языке можно построить на кодах возврата и будет легко и удобно. Далеко не в любом случае можно вообще использовать исключения. Вывод: исключения идут нафиг. Да даже подумать слегка: если произошло исключение значит что-то где-то упало. Мы пишем программы чтобы они работали и не падали. Значит исключений быть не должно. Но с упорством достойным лучшего применения люди придумывают себе головную боль работы с исключениями. С тем чего быть не должно. Идиотизм чистейший. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 03:12 |
|
||
|
Идеология С++ и warnings
|
|||
|---|---|---|---|
|
#18+
исключения бростать только в драйверах и ловить тока вокруг вызовов стороних библиотек. Во всех остальных случаях дурного тона. Даже в Microsoft наконец от этого вылечились кидать exceptins по любому поводу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 05:45 |
|
||
|
Идеология С++ и warnings
|
|||
|---|---|---|---|
|
#18+
White OwlДа даже подумать слегка: если произошло исключение значит что-то где-то упало Ну вот, человек даже не понимает сути механизма исключений, но зато уверен что они зло )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 07:04 |
|
||
|
Идеология С++ и warnings
|
|||
|---|---|---|---|
|
#18+
LepsikДаже в Microsoft наконец от этого вылечились кидать exceptins по любому поводу Проблема с неверным применением исключений возникает не из-за кидания по любому поводу, а из-за ловли по любому поводу )) Код: plaintext 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. 32. С исключениями, если ловить их на правильном уровне абстракции такой код получается чистый и лаконичный. С кодами возврата, каждый вызов на каждом уровне вложенности получается обернут в проверки этих кодов, которые 1) засоряют текст, затрудняя понимание алгоритма. 2) можно забыть поставить и ошибка не будет обработана. Таким образом исключения - зло, только для тех кто не умеет их применять (ловит их как коды возврата - на каждом уровне абстракции). Для всех остальных - они на порядки упрощают написание и сопровождение кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 07:17 |
|
||
|
Идеология С++ и warnings
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovMasterZivКакие предупреждения ты имеешь в виду ? Вот, например, ODBC API. К нему есть некоторая обёртка. Для простого SQL_ERROR эта обёртка, ясное дело, выкидывает исключение с текстом ошибки внутри. Обработка SQL_SUCCESS - тоже простая вещь. А вот что делать когда функция ODBC возвращает SQL_SUCCESS_WITH_INFO - я в непонятках. Этот код возвращается в куче ситуаций, причём в большинстве они специфичны для СУБД, то есть "generic" обработчик их невозможен. MS SQL, например, имеет привычку играть в КО и возвращать "информацию" типа "успешно соединились с базой такой-то". На другом конце палки - "предупреждение" типа "данные были усечены при доставке", игнорировать которое чревато боком. Ну, я делал "обёртки" над ODBC и OpenClient, надо сказать, что во-первых, эта штука достаточно специфическая, и далеко не в каждой библиотеке есть такие "проблемы". ( Кстати, хорошо, что ты сразу привёл конкретную ситуацию, а то гадали бы 10 лет ещё.) Во-вторых, обработка таких штук выходит за рамки языка С++ как такового, это уже логика работы конкретных библиотек. Ну и соответственно, решать их надо не на уровне языка, а на уровне библиотек и их организаций. Конретно тут я бы сделал (а когда я это делал, я именно так и реализовывал) интерфейс (pattern Bridge) для обработки ошибок и предупреждений (в общем это называется "сообщения") со стороны БД, а затем бы реализовал дефолтную реализацию данного интерфейса для всех (и возможно для каждой СУБД в отдельности, если есть разные СУБД), которая бы обрабатывала ошибки и предупреждения и прочие сообщения (кстати, есть и просто сообщения, это в том же MSSQL/Sybase всё, что пишет оператор print на серверной стороне), и, возможно, в каких-то случаях генерировала бы исключения, в каких-то может быть писала бы в лог и т.п. Кроме этого, естественно, надо дать возможность пользователю переопределять этот обработчик сообщений, а также задать по умолчанию дефолтный обработкик, предоставляемый библиотекой, при создании соединения с БД (как правило, обработка ошибок специфична именно для соединения). Ни в коем случае нельзя делать реализацию по принципу "ошибка с сервера -- генерим исключение", как сделано, например, в Delphi (если не сейчас, то по крайней мере в какое-то время так было). Сообщение с сервера -- это далеко не всегда что-то, после чего нельзя продолжить выполнение программы (что подразумевает исключение). Также некоторые ошибки и сообщения должны приводить к повторению выполнения запроса ( дедлоки, перекомпиляция пакета в Oracle), а некоторые -- к пересозданию соединения с БД (если библиотека конечно это поддерживает, а хорошая -- я считаю -- обязана). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 11:34 |
|
||
|
Идеология С++ и warnings
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Этот код возвращается в куче ситуаций, причём в большинстве они специфичны для СУБД, то есть "generic" обработчик их невозможен. Сори, хочу подчеркнуть отдельно. Ну так тогда очевидно напрашивается дефолтная реализация обработчика для всех СУБД, и её наследники -- реализации для конкретных СУБД, а также возможность для пользователя задать свой собственный обработчик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 11:36 |
|
||
|
Идеология С++ и warnings
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovAnatoly Moskovsky"Информация" должна возвращаться явно, а ошибки - через исключения. Тогда у функции придётся предусматривать два выхода, да ещё и проверять результат ри каждом вызове, а это "не С++ методы". Вот, например, метод Код: sql 1. Если ему прикручивать дополнительный статусный выход, получится коряво. У меня в библиотеках было три выхода из запроса: наборы данных выходные параметры диагностика (набор сообщений от СУБД) Я считаю, что это -- самый правельный подход. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 11:38 |
|
||
|
Идеология С++ и warnings
|
|||
|---|---|---|---|
|
#18+
White OwlИех вы.... люди ушибленные С++. Исключения это изначально дурная идея, не имеющая ни одного полезного свойства. В учебнике написано что исключения это здорово и вы поверили. А теперь пытаетесь с ними работать. Мне вас жаль. Но вы этого поста не поймете. Потому что верите учебникам и различным гуру от "С++ за 21 день" которые задурили вам головы. Твои экстремистские взгляды всем известны и малоинтересны (извини). На самом деле, если ты подумаешь, то поймёшь, что исключения придуманы не в С++, они были с самого рождения ЭВМ. Деление на 0 -- самый яркий пример. Да, и исключения -- это не способ принести пользу, это способ не принести вред. Так что все рассуждения о пользе бессмысленны (только прошу тему не развивать, или в отдельном треде). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 11:41 |
|
||
|
Идеология С++ и warnings
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovВася Уткинлучше Но возникает вопрос как узнать, что дополнительную инфу нужно получать. Простейший пример: А никак не надо. Надо просто всегда эту доп. инфу возвращать, и всё. Возможно, она будет в 90% пустая -- ну и не страшно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 11:42 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38864880&tid=2019133]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 165ms |

| 0 / 0 |
