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

функция возвращает int, возвращаемые значения определены в макросах, как сразу выводить определённые макросы? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Строки и стек http://www.cyberforum.ru/cpp-beginners/thread382658.html
Задача такова: пользователь с клавиатуры вводит строку, после введения запускается обработчик, который удаляет из этой строки символ "t". Обработанная строка заносится в стек. По введенной команде...
C++ Представление в памяти компьютера типа double нужна помощь в представление ВПК (в памяти компютера) тип данних double например нам дано такое: double y = -4.8e1 и хочем чтоб компилятор сделал такое: long w1 = *reinterpret_cast<long*>(&y)+33;... http://www.cyberforum.ru/cpp-beginners/thread382646.html
Подсчитать количество различных пар букв C++
Помогите решить задачу, вернее переделать))) Во введенном слове подсчитать количество различных пар букв. ( например, в слове вавасавасd –5 различных пар букв). Нашёл на форумах такую же на С++,...
C++ Подскажите с чего начать.
Доброго времени суток. По работе появилась необходимость работать с С.До этого изучал Java. Когда начинал Java сразу сел за NetBeans, и упустил некоторые базовые вещи которые за меня делала IDE,...
C++ Динамические массивы http://www.cyberforum.ru/cpp-beginners/thread382612.html
Объясните пожалуйста что такое динамические массивы. Это массивы с не константным количеством элементов? Если так, то как их объявлять?
C++ Сортировка пузырьком. Приветствую, тех кто заглянул в топик. Помогите, пожалуйста, решить задачу на C пузырьковой сортировкой. Отсортировать символьный массив. Сначала цифры по убыванию, затем символы по алфавиту... подробнее

Показать сообщение отдельно
Nameless One
Эксперт С++
5773 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
13.11.2011, 16:37
Цитата Сообщение от kravam Посмотреть сообщение
А с исключениями я пока не знаком, ну то есть я их пробовал изучить, но не просёк в чём там их преимущество. Типа возвращать всё в одно место круто гы-гы
ну вот пример реализации с исключениями (опять с использованием x-макросов, так как ты хочешь использовать для индикации типа ошибки целочисленный идентификатор). Чтобы добавить/удалить исключение, нужно изменить только одну строку в макросе DECLARE_ERRORS.
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <iostream>
#include <stdexcept>
 
#define DECLARE_ERRORS                          \
    X(FILE_ALREADY_EXISTS, "The specified file already exists")     \
    X(INCORRECT_NAME, "The specified filename is incorrect")        \
    X(CUSTOM_ERROR, "Custom error")
 
#define X(ID, DESC) ID,
enum class fs_error_type: size_t
{
    DECLARE_ERRORS
};
#undef X
 
#define X(ID, DESC) DESC,
static const char* fs_error_desc[] =
{
    DECLARE_ERRORS
};
#undef X
 
class fs_error: public std::runtime_error
{
public:
    fs_error(fs_error_type);
 
    const fs_error_type type;   // const public member (!)
};
 
fs_error::fs_error(fs_error_type t)
    : runtime_error(fs_error_desc[static_cast<size_t>(t)]), type(t)
{
}
 
// функция, которая может выбросить исключение
void do_unsafe_fs_stuff(int param) throw(fs_error)
{
    if(param == 42)
    return;         // пусть будет успех
 
    if(param == 255)
    throw fs_error(fs_error_type::INCORRECT_NAME);
 
    if(param == 0)
    throw fs_error(fs_error_type::FILE_ALREADY_EXISTS);
        
    if(param >= 2)
    throw fs_error(fs_error_type::CUSTOM_ERROR);
}
 
 
int main()
{
    size_t arr[4] = {3, 0, 255, 42};
 
    for(size_t i = 0; i < 4; ++i)
    {
    try
    {
        std::cout << "Doing unsafe stuff, passing " << arr[i] << " as param... ";
        do_unsafe_fs_stuff(arr[i]);
        std::cout << "done" << std::endl;
    }
    catch(std::exception& e)
    {
        std::cerr << "an error occured: " << e.what() << std::endl;
    }
    }
    
    return 0;
}
Другая стратегия - это сделать для каждой ошибки свой класс исключения
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru