Очевидно, вы пытаетесь catch
ошибок от функций, которые не выдают исключения, но возвращают числовые коды ошибок. Это невозможно. Самое близкое, что вы можете получить - это обернуть все ваши функции C в код, генерирующий исключение, самостоятельно:
FILE *safe_fopen(char const *path, char const *mode)
{
FILE *f = std::fopen(path, mode);
if (f == NULL)
throw std::runtime_error(std::strerror(errno));
return f;
}
Невозможно вызвать исключение, когда программа разыменовывает нулевой указатель или недействительный фрагмент памяти, по крайней мере, не переносимым способом; когда это происходит, поведение просто не определено. Там нет кода ошибки, чтобы проверить, просто segfault на большинстве ОС.
Но, пожалуйста, уточните свою терминологию. Компилятор не выдает исключение, функция может делать это во время выполнения. Компилятор C имеет мало общего со всем этим.