Понимание части кода на C ++ - PullRequest
0 голосов
/ 16 марта 2011

Можете ли вы помочь мне понять следующий код?

void errorexit(char *pchar) {
  // display an error to the standard err.

  fprintf(stderr, pchar);
  fprintf(stderr, "\n");
  exit(1);
}

Ответы [ 3 ]

0 голосов
/ 16 марта 2011

Он выводит строку, на которую указывает pchar, в стандартный вывод ошибок через fprintf, а затем вынуждает приложение завершиться с кодом возврата 1. Это будет использоваться для критических ошибок, когда приложение не может продолжить работу.

0 голосов
/ 16 марта 2011

Эта функция печатает предоставленную строку и символ новой строки в stderr, а затем завершает текущую запущенную программу, предоставляя 1 в качестве возвращаемого значения.

fprintf похоже на printf в том смысле, что оно выводит символы, но fprintf немного отличается тем, что принимает дескриптор файла в качестве аргумента. В этом случае stderr является дескриптором файла для стандартной ошибки. Этот дескриптор уже определен для вас stdio.h и соответствует потоку вывода ошибок. stdout - это то, на что выводит printf, поэтому fprintf(stdout, "hello") эквивалентно printf("hello").

exit - это функция, которая прекращает выполнение текущего процесса и возвращает любое значение, которое было его аргументом, в качестве кода возврата для родительского процесса (обычно оболочки). Ненулевой код возврата обычно указывает на сбой, конкретное значение указывает тип сбоя.

Если вы запустили эту программу из оболочки:

#include <stdio.h>
#include "errorexit.h"

int main(int argc, char* argv[])
{
    printf("Hello world!\n");
    errorexit("Goodbye :(");
    printf("Just kidding!\n");

    return 0;
}

Вы увидите этот вывод:

Hello world!
Goodbye :(

И ваша оболочка будет показывать «1» в качестве возвращаемого значения (в bash вы можете просмотреть последний код возврата с помощью echo $?).

Обратите внимание, что "Просто шучу!" не будет напечатано , так как errorexit вызывает exit, завершая программу до завершения main.

0 голосов
/ 16 марта 2011

Вызов errorexit("Error Message") напечатает «Сообщение об ошибке» в стандартный поток ошибок (часто в терминале) и выйдет из программы. Любые программы (например, оболочка), которые вызвали вашу программу, будут знать, что произошла ошибка, поскольку ваша программа вышла с ненулевым статусом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...