Запустить клиент emacs на сервере Windows XServer [дубликат]

возвращаемое значение

Я вижу, что вы используете EXIT_FAILURE в своем коде, поэтому вы включаете stdlib.h . В этом заголовочном файле EXIT_FAILURE и EXIT_SUCCESS определены как:

#define EXIT_FAILURE    1       /* Failing exit status.  */
#define EXIT_SUCCESS    0       /* Successful exit status.  */

Что соответствует типичному поведению программ UNIX. тип man также полезен здесь, поскольку тип является командой POSIX :

EXIT STATUS
       The following exit values shall be returned:

        0    Successful completion.

       >0    An error occurred.

Поэтому да, возвращая 1 в случае сбоя в типе является правильным и ожидаемым поведением.

Более того, использование EXIT_FAILURE и EXIT_SUCCESS в каждом return вместо довольно запутанных return 1 и return false будет лучше.


if

if оценивает возвращаемое значение переданной ему команды следующим образом: если команда возвращает 0 , она считает его истинным и выполняет then блок; если команда возвращает что-то отличное от 0 , выполняется блок else (при условии, что этот блок существует).

Следовательно, ваш тип (возвращающий 0 в случае успеха и 1 в случае неудачи) должен работать, как ожидалось, в:

if type less > /dev/null
then
    echo less exists
else
    echo no less we need to use more
fi

Еще одна вещь, в вашем коде меня беспокоит эта часть:

if ((curr_path = malloc(strlen(path) + sizeof(argv[1]))) != NULL) {
    if (curr_path == NULL) {
        fprintf(stderr, "malloc failed!\n");

    }

Это второй , если никогда не будет правдой. Вы можете попасть внутрь внешнего блока, только если curr_path! = NULL и вы тестируете curr_path == NULL . Я считаю, что вместо этого вам нужно следующее:

if ((curr_path = malloc(strlen(path) + sizeof(argv[1]))) != NULL) {
    ...  /* the actual path matching */
}
else {
    fprintf(stderr, "malloc failed!\n");
}
1
24.04.2014, 21:00
0 ответов

Теги

Похожие вопросы