Сообщение Re[13]: А чего молчим про Crowdstrike от 25.07.2024 22:37
Изменено 25.07.2024 22:43 vdimas
Re[13]: А чего молчим про Crowdstrike
Здравствуйте, Константин Б., Вы писали:
КБ>Ну т.е. программист должен будет написать вот такое в каждом месте где он разыменовывает указатель?
Макросы плюс библиотечная поддержка.
Ну и, для голого Си можно ограничится пробрасыванием int err_code:
Всё равно нет наследования объектов, поэтому пробрасывать некие объекты из иерархии их бессмысленно.
К тому же, нет конструктора копирования, поэтому выбрасывать исключения-структуры по-значению не выйдет.
К тому же, все указатели равны указателю void*, поэтому пробрасывать исключения-структуры по указателю и типизированно их перехватывать тоже не выйдет.
3. Реальная сложность будет в разметке catch, процитирую себя:
Поэтому, сначала пришлось бы регистрировать обработчики, а потом выполнять целевой код, как-то так:
КБ>Ну т.е. программист должен будет написать вот такое в каждом месте где он разыменовывает указатель?
Макросы плюс библиотечная поддержка.
Ну и, для голого Си можно ограничится пробрасыванием int err_code:
throw_err(EINVAL);
Всё равно нет наследования объектов, поэтому пробрасывать некие объекты из иерархии их бессмысленно.
К тому же, нет конструктора копирования, поэтому выбрасывать исключения-структуры по-значению не выйдет.
К тому же, все указатели равны указателю void*, поэтому пробрасывать исключения-структуры по указателю и типизированно их перехватывать тоже не выйдет.
3. Реальная сложность будет в разметке catch, процитирую себя:
Т.е. компилятор нифига не помогает в случае Си.ключевое отличие лишь в том, что setjmp вызывается коде динамически, т.е. некий твой код динамически заполняет структуру jmp_buf, а компилятор генерит таблицу уже заполненных аналогичных структур для ф-ии еще в процессе компиляции.
Поэтому, сначала пришлось бы регистрировать обработчики, а потом выполнять целевой код, как-то так:
int do_something(void) {
throw_err(42);
}
int some_fn() {
int rc;
try()
catch_err(42)
printf("Error!!!\n");
end_catch()
catch_err(43)
printf("Warning!!!\n");
end_catch()
rc = do_something();
end_try()
return rc;
}
Re[13]: А чего молчим про Crowdstrike
Здравствуйте, Константин Б., Вы писали:
КБ>Ну т.е. программист должен будет написать вот такое в каждом месте где он разыменовывает указатель?
Макросы плюс библиотечная поддержка.
Ну и, для голого Си можно ограничится пробрасыванием int err_code:
Всё равно нет наследования объектов, поэтому пробрасывать некие объекты из иерархии их бессмысленно.
К тому же, нет конструктора копирования, поэтому выбрасывать исключения-структуры по-значению не выйдет.
К тому же, все указатели равны указателю void*, поэтому пробрасывать исключения-структуры по указателю и типизированно их перехватывать тоже не выйдет.
3. Реальная сложность будет в разметке catch, процитирую себя:
Поэтому, сначала пришлось бы регистрировать обработчики, а потом выполнять целевой код, как-то так:
КБ>Ну т.е. программист должен будет написать вот такое в каждом месте где он разыменовывает указатель?
Макросы плюс библиотечная поддержка.
Ну и, для голого Си можно ограничится пробрасыванием 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;
}