Форум программистов, компьютерный форум CyberForum.ru

задания из книги Плаугера - C++

Восстановить пароль Регистрация
 
stdcout
53 / 53 / 2
Регистрация: 06.04.2011
Сообщений: 210
25.07.2011, 21:31     задания из книги Плаугера #1
из "Standard C Library"
Exercise 1.4. Write a version of assert.h and xassert.c that prints all assertions. Why would you want to use this version?
Exercise 1.5. Write a handler for the signal SIGABRT that writes the prompt:
Continue (y/n)?
to the standard error stream and reads the response from the standard input stream. If the response is yes (in either uppercase or lowercase), the handler should reestablish itself and return control to the abort function.
Why would you want this capability?
Так вот, в задании 1.4 мне не совсем понятен перевод вот этого
that prints all assertions.
А в задании 1.5, как я понял, нужно дать пользователю выбор, при получении программой сигнала SIGABRT решить, продолжить ли выполнение программы, несмотря на получение этого сигнала. Хочется узнать, как это можно осуществить. Как нужно написать обработчик для этого?

Добавлено через 10 часов 23 минуты
Никто не может помочь?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
26.07.2011, 00:22     задания из книги Плаугера #2
По поводу 1.4 я точно знать не могу. Но мысли кое-какие есть.
Обычная версия assert ничего не делает, если выражение истинно, а если ложно, то выводит сообщение assertion failed, номер строки и т.д. с выходом из программы.
По-моему имеется в виду такая версия, которая бы выводила сообщение типа Assertion OK при истинном выражении (разумеется без выхода) по аналогии с обычным сообщением assert.
stdcout
53 / 53 / 2
Регистрация: 06.04.2011
Сообщений: 210
26.07.2011, 10:35  [ТС]     задания из книги Плаугера #3
А вот по второму заданию. Можно ли написать обработчик сигнала SIGABRT так, чтобы после вызова функции abort() программа не завершалась, а выполнение продолжалось с инструкции, следующей за abort()?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
26.07.2011, 10:48     задания из книги Плаугера #4
stdcout, Можно. Только вопрос про какую систему здесь говориться? Хотя boost позволяет написать универсальное скорее всего
stdcout
53 / 53 / 2
Регистрация: 06.04.2011
Сообщений: 210
26.07.2011, 13:01  [ТС]     задания из книги Плаугера #5
Речь идёт о C, и похоже, что только средствами стандартной библиотеки.
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
26.07.2011, 14:28     задания из книги Плаугера #6
Цитата Сообщение от stdcout Посмотреть сообщение
Можно ли написать обработчик сигнала SIGABRT так, чтобы после вызова функции abort() программа не завершалась, а выполнение продолжалось с инструкции, следующей за abort()
Может быть для некоторых компиляторов.
У меня GCC после безусловного вызова abort() дальнейший код даже не генерирует. Какой уж там возврат, если код для исполнения закончился. Другое дело если обработчик вызывается через raise(SIGABRT), но в задании-то не так.

Добавлено через 7 минут
Хотя, с другой стороны, безусловный abort() в реальной программе тоже странное явление. Надо будет попробовать с вызовом по некоторому условию.

Добавлено через 28 минут
Не, в случае условного выхода делается переход на вызов abort() за которым опять ничего нет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2011, 15:23     задания из книги Плаугера
Еще ссылки по теме:

C++ Книги Г.Шилдта в каком порядке нужно или какие книги для изучения с++
Задания из книги Р. Лафоре C++
C++ - Задания из книги Р. Лафоре C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
26.07.2011, 15:23     задания из книги Плаугера #7
После посыла сигнала kill -6 нормуль все работает.

C++
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
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
 
void sig_handler(int signo)
{
    fprintf(stderr, "%s\n", "Sighandler called");
    return;
}
 
void function(void)
{
    fprintf(stderr, "%s\n", __FUNCTION__);
    sleep(20);
}
 
int main(void)
{
    signal(SIGABRT, sig_handler);
    while(1)
    {
        fprint(stderr, "%s\n", loop);
        function();
    }
}
А вот при вызове abort из кода хуже.
Yandex
Объявления
26.07.2011, 15:23     задания из книги Плаугера
Ответ Создать тему
Опции темы

Текущее время: 08:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru