Re[13]: А чего молчим про Crowdstrike
От: vdimas Россия  
Дата: 25.07.24 22:37
Оценка:
Здравствуйте, Константин Б., Вы писали:

КБ>Ну т.е. программист должен будет написать вот такое в каждом месте где он разыменовывает указатель?


Макросы плюс библиотечная поддержка.

Ну и, для голого Си можно ограничится пробрасыванием int err_code:
throw_err(EINVAL);

Всё равно нет наследования объектов, поэтому пробрасывать некие объекты из иерархии их бессмысленно.
К тому же, нет конструктора копирования, поэтому выбрасывать исключения-структуры по-значению не выйдет.

К тому же, все указатели равны указателю void*, поэтому пробрасывать исключения-структуры по указателю и типизированно их перехватывать тоже не выйдет.


3. Реальная сложность будет в разметке catch, процитирую себя:

ключевое отличие лишь в том, что setjmp вызывается коде динамически, т.е. некий твой код динамически заполняет структуру jmp_buf, а компилятор генерит таблицу уже заполненных аналогичных структур для ф-ии еще в процессе компиляции.

Т.е. компилятор нифига не помогает в случае Си.

Поэтому, сначала пришлось бы регистрировать обработчики, а потом выполнять целевой код, как-то так:
int do_something(void) {
    throw_err(42);
}

int some_fn() {
    int rc = -1;

    try()
        catch_err(42) 
            printf("Error!!!\n");
        end_catch()

        catch_err(43) 
            printf("Warning!!!\n");
        end_catch()

        rc = do_something();
    end_try()

    return rc;
}
Отредактировано 25.07.2024 22:43 vdimas . Предыдущая версия . Еще …
Отредактировано 25.07.2024 22:42 vdimas . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.