Это злоупотребление макросами?

Я произвел обратный инжиниринг некоторого кода и натолкнулся на это ...

/************************************************************************/
/*                                                                      */
/*                          MACRO CHECK_FREAD                           */
/*                                                                      */
/*  CHECK_FREAD is used to check the status of a file read.  It         */
/*   is passed the return code from read and a string to print out if   */
/*   an error is detected.  If an error is found, an error message is   */
/*   printed out and the program terminates.  This was made into a      */
/*   macro because it had to be done over and over and over . . .       */
/*                                                                      */
/************************************************************************/

#define CHECK_FREAD(X, msg)  if (X==-1) \
                 { \
                return(DCD_BADREAD); \
                 }

По сути, определенный набор функций в этом файле вызывает это всякий раз, когда они выполняют (c-read), чтобы проверить результат для ошибка. У них также есть аналогичная проверка для EOF ... По сути, насколько я могу судить, они делают это таким образом, чтобы вставлять возвращаемые значения ошибки в середине их функции в кучу мест.

Например,

/*  Read in an 4                */
    ret_val = read(fd, &input_integer, sizeof(int32));

    CHECK_FREAD(ret_val, "reading an 4");
    CHECK_FEOF(ret_val, "reading an 4");

    if (input_integer != 4)
    {
        return(DCD_BADFORMAT);
    }

    /*  Read in the number of atoms         */
    ret_val = read(fd, &input_integer, sizeof(int32));
    *N = input_integer;

    CHECK_FREAD(ret_val, "reading number of atoms");
    CHECK_FEOF(ret_val, "reading number of atoms");

Теперь я только возвращаюсь к программированию на c / c ++, и я никогда прежде не использовал макро очень, но это злоупотребление макросами?

Я читал это ... Когда полезны макросы C ++?

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

... э-э-э, не лучше ли было бы использовать какую-то упаковку?

12
задан Community 23 May 2017 в 10:32
поделиться