LINUX.ORG.RU

[C] [жизнь без исключений] Как вы обрабатываете ошибки?

 


0

0

Пишу на C прошивку для микроконтроллера. Возникла следующая проблема:

while (1) {
	..
	for (..) {
		..
		if (..) {
			вдруг неожиданно произошло что-то очень не хорошее, например, аппаратная ошибка несовместимая с нормальной работой программы, нужно выйти из цикла while (1)
		}
		..
	}
	..
	switch (..) {
	case ..:
		if (..) такая же ситуация...
		break;
		..
	}
	..
}
.. 
if (флаг если ошибка) {
	обработка
}
..

И как тут быть? Неужели goto, и будет мне вагон счастья? А как же «напишешь «goto» и за тобой придёт бабай! Буууу!» (c), Дейкстра и весь такой прочий антураж?


Ответ на: комментарий от kemm

>Ты уже придумал способ открыть UDS другим способом, без goto и гор твоей любимой копипасты, о Великий Проектировщик Хеллоу Ворлдов?

тссс не пугай, он наверное и слов таких как unix socket не знает, ты че, у него ж проэкты намноооого серьезнее

chicane
()
Ответ на: комментарий от eugene2k

>Если нужен качественный код, то лишний слой абстракции не нужен

а нелишний?

>Если к дедлайну нужно успеть, тогда нужен конечно.

ну, можно вообще слоёв абстракции не делать, писать в машкодах. к дедлайну точно успеешь, да

jtootf ★★★★★
()
Ответ на: комментарий от golodranez

Ты хоть раз можешь ответить на прямо поставленный вопрос или величия твоего "интеллекта" на такое уже не хватает, детинушка?

kemm
()
Ответ на: комментарий от golodranez

>советую перечитать тред с начала:)

и что я там найду? как вы переписали этот код без goto и его аналогов и без колбасы?

chicane
()

Не знаю, может уже было...

Для С можно использовать setjmp/longjmp в обертке из макросов. И при этом заточить их под особенности обработки "исключений" в приложении.

aist1 ★★★
()
Ответ на: комментарий от golodranez

Раз уж пост оживили, продолжим пинать метанирующих. golodranez, у тебя было 11 дней ответить на 2 простых вопроса:

"> Дибилушка, незнающий элементарного.

Ты уже придумал способ открыть UDS другим способом, без goto и гор твоей любимой копипасты, о Великий Проектировщик Хеллоу Ворлдов?

> Тебя gag вчера уже ткнул в твоё невежество, так что помалкивай.

Дай ссылку на свою альтернативную реальность, а то в этой всё как-то не так, как тебе мнится."

Ты на них ответишь или прямо тут напишешь "я пустая балаболка, не знающая элементарного"? Выбирай. 8))

kemm
()
Ответ на: комментарий от kemm

Ну да, реализаций этого дела полно. Так что вопрос, имхо, не стоит 9 страниц обсуждений))) Разве что setjmp/longjmp недоступны по каким-либо причинам...

aist1 ★★★
()
Ответ на: комментарий от aist1

> Так что вопрос, имхо, не стоит 9 страниц обсуждений)))

Зачем в данном случае setjmp/longjmp, когда есть goto? Никаких плюсов от них я не вижу. Они есть?

А так тут только один Гуру против goto яро возражает. 8))

kemm
()
Ответ на: комментарий от kemm

Если вопрос стоит именно так, то goto - самый лучший способ. Те, кому использовать goto не позволяют убеждения, могут обернуть его в систему макросов.

aist1 ★★★
()
Ответ на: комментарий от golodranez

Тю, так ты придумал способ открыть UDS без goto и гор копипасты? А ссылку на свою альтернативную реальность нашёл? 8))

Ну или извинись за свой бред, что ли... Я сегодня добрый. 8))

kemm
()
Ответ на: комментарий от kemm

Я же тебе говорил - тролям на глупые вопросы не отвечаю. А тебе посоветую чаще смыть гель с волос, а то похож на бородатую девочку:)

ЗЫ Что к этому UDS привязался, как будто не знаешь что его можно открыть 1000 и одним способом? )) Стивенса перечитай хотябы.

golodranez ★★★★
()
Ответ на: комментарий от golodranez

>ЗЫ Что к этому UDS привязался, как будто не знаешь что его можно открыть 1000 и одним способом? )) Стивенса перечитай хотябы.

ну напишите хоть один вариант без goto из этих 1001

chicane
()
Ответ на: комментарий от golodranez

>>goto годится, только если обработчик ошибки находится в пределах функции, где она возникла.

>вот-вот.

вообще то в приведенной функции открытия UDS обработчик был в пределах функции, если вы не заметили

chicane
()
Ответ на: комментарий от golodranez

> Я же тебе говорил - тролям на глупые вопросы не отвечаю.

Скажи уже наконец: "да, я, golodranez, тупое трепло, пытаюсь рассуждать о вещах, в которых не бельмеса не смыслю".

> А тебе посоветую чаще смыть гель с волос, а то похож на бородатую девочку:)

Дитё, это, пожалуй, самое глупое, что ты сказал в этой теме, радуйся! 8)) Многие уже начали думать, что ты свои рекорды уже побить не сможешь.

> ЗЫ Что к этому UDS привязался, как будто не знаешь что его можно открыть 1000 и одним способом? ))

Трепло опять не сможет ответить за свои слова и назвать хоть один способ из 1001, да так, чтобы без гор своей любимой копипасты? Ну так на то оно и трепло.

> Стивенса перечитай хотябы.

Трепло даже номера страниц (с указанием издания) сможет назвать или номера глав? Просим, просим!

kemm
()
Ответ на: комментарий от golodranez

> даммм... детский сад))

Ну так ты спроси уже наконец-то у воспитательницы, как можно открыть UDS 1001 способом. Ну или у товарищей у старшей группы, которые тебе эту мысль подсказали. 8))

kemm
()
Ответ на: комментарий от kemm

>Ну так ты спроси уже наконец-то у воспитательницы

Я спрашивал, она не знает. Говорит:"PHP - нашё всё" :)

golodranez ★★★★
()
Ответ на: комментарий от golodranez

Да можешь и сейчас угостить. Водку в начале рабочей недели как-то перебор, но в "12 месяцев" вроде есть условно приличное пиво в виде Крушовице. 8))

kemm
()
Ответ на: комментарий от golodranez

> Я из Обнинска, профиль глянь.

Мужыг, ты не поверишь -- глянул. 8))

> А так бы угостил:) У нас, кстати, тоже есть 12 месяцев.

Мужыг, ты не поверишь -- я про него и говорю. Который на Маркса 114.

kemm
()
Ответ на: комментарий от golodranez

> Так ты из Москвы или откуда, сознавайся?:))

В данный момент -- в Обнинске. Так что аккуратнее надо было быть, ога. 8))

kemm
()
Ответ на: комментарий от kemm

>Так что аккуратнее надо было быть, ога.

Я большой и страшный, не напугаешь:))

>В данный момент -- в Обнинске.

продолжим тему - каникулы чтоли? ))))))))))))))))))))

golodranez ★★★★
()
Ответ на: комментарий от golodranez

> Я большой и страшный, не напугаешь:))

А про старшего брата вспомнить почему забыл?

> продолжим тему - каникулы чтоли? ))))))))))))))))))))

У тебя? Вряд ли, в детсаду каникул не бывает, вроде бы.

Ты не отмазывайся, обещал угощать -- вперёд, заодно и за неумный троллинг извинишься. Ну или принесёшь распечатку открытия UDS без goto и копипасты, и томик Стивенса с описанием 1001 способа, ога.

kemm
()
Ответ на: комментарий от kemm

>А про старшего брата вспомнить почему забыл?

нету у меня:(

>заодно и за неумный троллинг извинишься.

не, с такими заявами сам себя угощай:) я тут не никогда толлил, и впредь не собираюсь.

Про goto отвечать не буду, а то ты опять на троллиг скатишься.

golodranez ★★★★
()
Ответ на: комментарий от golodranez

> не, с такими заявами сам себя угощай:) я тут не никогда толлил, и впредь не собираюсь.

Ничего себе. Ты тут не способен внятно ответить на простой вопрос в течении двух недель, постоянно глупо пытаясь увильнуть, смешно наезжаешь на уровне младшей группы детского садика -- и называешь это "не троллил"? О как...

> Про goto отвечать не буду, а то ты опять на троллиг скатишься.

Т.е. десять дней на раздумье тебе не помогли и открыть UDS без гор копипасты ты не в состоянии? Страницу из Стивенса, где груда разных способов открыть UDS, тоже назвать не можешь? Так кто здесь троллит, трепло?

kemm
()
Ответ на: комментарий от kemm

Юноша, я думаю ты достаточно догадлив чтобы понять - поле твоего троллинга и явного нежелания читать, что написал я другие учасники этого треда, я отвечать на это не буду. О чём явно написал.

>наезжаешь на уровне младшей группы детского садика -- и называешь это "не троллил"?

ты меня с собой попутал.

ЗЫ Пока у тебя каникулы - чего ты весь день у компа торчишь? Много красивых девушек на улице, сходи познакомься с кемнибудь, пивка попей. А то вон нервный какой:)

ЗЗЫ А пока ты отправляешься в игнор, ибо троллей я не люблю. Подумай о своём поведени и пересмотри свои взгляды на программирование, а то редкосную чушь в разделе Development пишешь.

golodranez ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.