|
|
|
как обрабатывать исключительные ситуации в чистом СИ
|
|||
|---|---|---|---|
|
#18+
назрел вопрос: кто и каким образом обрабатывает исключительные ситуации в чистом СИ? Например: int x; scanf("%d", &x); // буду вводить специально строку, тогда все зацикливается, как в матрице какие существуют решения? неплохо бы линк дать, если что то уже есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2009, 01:08:34 |
|
||
|
как обрабатывать исключительные ситуации в чистом СИ
|
|||
|---|---|---|---|
|
#18+
упс! в чистом С не бывает исключений, механизма такого не предусмотрено в языке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2009, 01:21:48 |
|
||
|
как обрабатывать исключительные ситуации в чистом СИ
|
|||
|---|---|---|---|
|
#18+
egorych это знаю, а как ты борешься с этим? вставляешь кучу флагов? например как застраховаться даже от некорректного ввода с клавиатуры? вообще как ошибки отлавливать? ведь написано миллиарды строк кода на СИ и программы очень усточевые? как их пишут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2009, 01:30:18 |
|
||
|
как обрабатывать исключительные ситуации в чистом СИ
|
|||
|---|---|---|---|
|
#18+
сишникЛяegorych это знаю, а как ты борешься с этим? вставляешь кучу флагов? например как застраховаться даже от некорректного ввода с клавиатуры? вообще как ошибки отлавливать? ведь написано миллиарды строк кода на СИ и программы очень усточевые? как их пишут?Вот так и пишут, чтоб были устойчивые.сишникЛяscanf("%d", &x); // буду вводить специально строку, тогда все зацикливается, как в матрицеscanf - отстой. Всегда делал вроде: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2009, 03:01:33 |
|
||
|
как обрабатывать исключительные ситуации в чистом СИ
|
|||
|---|---|---|---|
|
#18+
сишникЛя wrote: > вообще как ошибки отлавливать? Проверять всё. > ведь написано миллиарды строк кода на СИ и программы очень усточевые? > как их пишут? Да так и пишут: берут и пишут. И думают при этом. Ну и на счёт того, что "СИ программы очень усточевые" -- есть разные, есть и устойчивые, и неустойчивые. Как напишешь в общем. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2009, 10:25:10 |
|
||
|
как обрабатывать исключительные ситуации в чистом СИ
|
|||
|---|---|---|---|
|
#18+
как пишут программы на С , к примеру ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2009, 11:40:38 |
|
||
|
как обрабатывать исключительные ситуации в чистом СИ
|
|||
|---|---|---|---|
|
#18+
сишникЛявообще как ошибки отлавливать? ведь написано миллиарды строк кода на СИ и программы очень усточевые? как их пишут? Язык С считается портабельным ассеблером. А в ассемблере ошибка существует очень кратковременно. Например результат переполнения арифм. операции включает флажок. Но это длиться мгновения. Следующая инструкция может этот флажок сбросить. Это самый ДЕШЕВЫЙ и БЫСТРЫЙ способ фиксации исключительной ситуации. В низкоуровневом API ядра ОС, практически все функции возвращают результат в виде целого числа (код ошибки). Проверяй эти коды и принимай решения. Это тоже в некотором роде ПРОВЕРКА ИСКЛЮЧЕНИЯ. Можешь почитать про сигналы . Насколько я помню в С они поддерживаются. Это еще не exceptions но уже более верхний уровень по отношению к коду ошибок. С помощью сигналов можно например проверять сингулярность при делении числа на 0. Это иногда полезно при визуализации графиков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2009, 13:56:12 |
|
||
|
как обрабатывать исключительные ситуации в чистом СИ
|
|||
|---|---|---|---|
|
#18+
сишникЛяназрел вопрос: кто и каким образом обрабатывает исключительные ситуации в чистом СИ? Вот механизм, являющийся одним из предков исключений: http://ru.wikipedia.org/wiki/Setjmp_(%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F) сишникЛякакие существуют решения? Уже сказали: писать, думая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2009, 22:38:13 |
|
||
|
как обрабатывать исключительные ситуации в чистом СИ
|
|||
|---|---|---|---|
|
#18+
softwarer, setjmp - это жестоко, значительно жестче, чем коды возврата, имхо, конечно, но я бы такого не советовал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2009, 01:49:56 |
|
||
|
как обрабатывать исключительные ситуации в чистом СИ
|
|||
|---|---|---|---|
|
#18+
egorychsetjmp - это жестоко, значительно жестче, чем коды возврата, имхо Имхо это "жестоко", когда код возврата один. Когда же их надо проверять в каждой из тысяч строк.... я бы всерьёз подумал. Конструкция Код: plaintext в целом эквивалентна Код: plaintext и если продумать подход и реализовать его в рамках проекта, можно получить очень неплохой выигрыш в читаемости кода и обработке ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2009, 02:10:39 |
|
||
|
как обрабатывать исключительные ситуации в чистом СИ
|
|||
|---|---|---|---|
|
#18+
да не совсем эквивалентна. когда я пишу throw < чего-то там >, то не задумываюсь, где будет перехвачено моё исключение, в случае setjmp/longjmp я контекст должен передавать по цепочке вызовов, есть ещё нюансы, типа "в промежутке между обращениями к setjmp и longjmp не должно быть возврата из функции, вызывавшей setjmp. ". ну и если уж быть совсем откровенным, то правильным будет код обработки вызова setjmp приблизительно такой: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2009, 02:42:51 |
|
||
|
как обрабатывать исключительные ситуации в чистом СИ
|
|||
|---|---|---|---|
|
#18+
softwarerесли продумать подход и реализовать его в рамках проекта, можно получить очень неплохой выигрыш в читаемости кода и обработке ошибок.если продумать единый подход и реализовать его в рамках проекта, то и с кодами ошибок можно сделать читаемый и понятный код, и с исключениями, и с любым другим механизмом... главное слово здесь: продумать , не правда-ли? )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2009, 02:46:53 |
|
||
|
как обрабатывать исключительные ситуации в чистом СИ
|
|||
|---|---|---|---|
|
#18+
egorychда не совсем эквивалентна. когда я пишу throw < чего-то там >, то не задумываюсь, где будет перехвачено моё исключение, в случае setjmp/longjmp я контекст должен передавать по цепочке вызовов, Вот ещё тоже :) Я ведь сказал "продумать". Не надо его передавать. Надо использовать статические переменные. И throw будет именно что не задумываться, где перехвачено. А над setjmp надо сделать обёртку, творящую стек обработчиков. egorychну и если уж быть совсем откровенным, то правильным будет код обработки вызова setjmp приблизительно такой: Совершенно не вижу, чем же он правилен. Это напоминает привычку "программировать на новом инструменте как привык на старом". egorychчто, по сути, сравнимо с вариантом Не сравнимо из-за разной начинки X. В случае throw/setjmp в X пишется просто логика, а в случае кода возврата - его нужно возвращать по цепочке вызовов, усеивая код бесконечными if. Если без извратов, то в самом простом случае exceptionserrcode Код: plaintext 1. 2. 3. 4. Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2009, 03:21:11 |
|
||
|
как обрабатывать исключительные ситуации в чистом СИ
|
|||
|---|---|---|---|
|
#18+
egorychесли продумать единый подход и реализовать его в рамках проекта, то и с кодами ошибок можно сделать читаемый и понятный код Вернее сказать, "с кучей дополнительных усилий можно сделать его приемлемым". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2009, 03:23:00 |
|
||
|
как обрабатывать исключительные ситуации в чистом СИ
|
|||
|---|---|---|---|
|
#18+
softwarer...А над setjmp надо сделать обёртку, творящую стек обработчиков. ... И это все на "чистом СИ"? Именно "чистый СИ" интересовал топикстартера. Сомнительно, что это вообще возможно, тем более с какой-то пользой для серьезного проекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2009, 06:33:11 |
|
||
|
как обрабатывать исключительные ситуации в чистом СИ
|
|||
|---|---|---|---|
|
#18+
avb1003softwarer...А над setjmp надо сделать обёртку, творящую стек обработчиков. ... И это все на "чистом СИ"? А в чём проблема? В чистом Си отменили указатели и списки? Две строчки... avb1003Именно "чистый СИ" интересовал топикстартера. Сомнительно, что это вообще возможно, тем более с какой-то пользой для серьезного проекта. (пожимая плечами) Не скажу за те серьёзные проекты, в которых две строчки вряд ли возможны... Кстати, вчера выпало - и finally такой конструкцией элементарно обеспечивается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2009, 12:04:40 |
|
||
|
как обрабатывать исключительные ситуации в чистом СИ
|
|||
|---|---|---|---|
|
#18+
softwareravb1003softwarer...А над setjmp надо сделать обёртку, творящую стек обработчиков. ... И это все на "чистом СИ"? А в чём проблема? В чистом Си отменили указатели и списки? Две строчки... Две строчки? И жалко было здесь их написать! Или чернила кончились? А это будет платформно-независимым ? softwarer avb1003Именно "чистый СИ" интересовал топикстартера. Сомнительно, что это вообще возможно, тем более с какой-то пользой для серьезного проекта. (пожимая плечами) Не скажу за те серьёзные проекты, в которых две строчки вряд ли возможны... Кстати, вчера выпало - и finally такой конструкцией элементарно обеспечивается. Нет, если две строчки, то да. Вы успеете из написать, до того как придет Большой Начальник и спросит:"А, что это Вы тут делаете? А зачем это нам надо?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2009, 16:54:47 |
|
||
|
как обрабатывать исключительные ситуации в чистом СИ
|
|||
|---|---|---|---|
|
#18+
в PostgreSQL используется похожая штука http://doxygen.postgresql.org/elog_8h-source.html#l00199 -- „Истина — это вовсе не то, что можно убедительно доказать, это то, что делает всё проще и понятнее“ — Антуан де Сент-Экзюпери ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2009, 17:29:57 |
|
||
|
как обрабатывать исключительные ситуации в чистом СИ
|
|||
|---|---|---|---|
|
#18+
Ёшв PostgreSQL используется похожая штука http://doxygen.postgresql.org/elog_8h-source.html#l00199 -- „Истина — это вовсе не то, что можно убедительно доказать, это то, что делает всё проще и понятнее“ — Антуан де Сент-Экзюпери Да, но вместо setjmp/longjmp используется "менее стандартная" пара sigsetjmp/siglongjmp и "решение" длиннее двух строк. Его не так легко позаимствовать и не очевидно, насколько оно подойдет для конкретного проекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2009, 21:17:56 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=122&tid=1344451]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 194ms |
| total: | 320ms |

| 0 / 0 |
