2016-09-05 6 views
3

Я прочитал много учебников и начинающие вопросы по обработке в C. ошибки они все (ну большинство), кажется, идет в этом направлении:C обработка ошибок в конце программы

int main(){ 

if(condition){ 
    fprintf(stderr, "Something went wrong"); 
    exit(EXIT_FAILURE); // QUIT THE PROGRAM NOW, EXAMPLE: ERROR OPENING FILE 
} 

exit(0) 
} 

Моего вопрос: есть ли какая-либо конкретная функция в C, которая позволяет мне поймать ошибку, но влияет только на статус программы (основной), когда она выйдет? Пример моей идеи:

int main(){ 

if(condition){ 
    fprintf(stderr, "Something went wrong"); 
    // Continue with code but change exit-status for the program to -1 (EXIT_FAILURE) 
} 

exit(IF ERROR CATCHED = -1) 
} 

Или мне нужно создать какую-то пользовательскую функцию или использовать какой-либо указатель?

+0

Хех? если что-то пошло не так, почему вы хотите продолжить? –

+1

'int status = N;/* ... */exit (status); '? (или лучше 'return') – keltar

ответ

3

Ну, вам не нужно звонить exit(), если вы хотите продолжить, не так ли? Вы можете использовать переменную, которая влияет на код выхода main().

#include <stdio.h> 

int main(void){ 
    int main_exit_code = EXIT_SUCCESS; 

    if(condition){ 
     fprintf(stderr, "Something went wrong"); 
     main_exit_code = -1; /* or EXIT_FAILURE */ 
    } 

    return (main_exit_code); 
} 

Но обратите внимание, что в зависимости от вида ошибки вы столкнулись, это не имеет смысла, чтобы продолжить выполнение во всех случаях. Итак, я оставлю это тебе решать.

+0

Спасибо за советы! И, конечно же, я буду иметь в виду не продолжать выполнение некоторых критических мест кода. – Pavoo

2

exit принимает int как статус, вы можете сохранить этот статус в переменной и вызвать exit с этим значением в конце:

int main(void) 
{ 
    int res = EXIT_SUCCESS; 

    if (condition) { 
     fprintf(stderr, "Something went wrong"); 
     res = EXIT_FAILURE; 
    } 
    /* Continue with code */ 
    exit(res); 
} 
+1

Спасибо! Как указывали другие, в C. нет специального try-catch. Я пойду с указателем, потому что у меня есть другие функции с такими незначительными «ошибками» (и, конечно, некоторые из них выйдут сразу). – Pavoo

 Смежные вопросы

  • Нет связанных вопросов^_^