Как получить доступ к значению параллельной структуры, используя код для обработки ошибок в C - PullRequest
0 голосов
/ 03 мая 2018

На данный момент я изучаю программирование на С, и я видел этот пост.

Рекомендации по именованию C для перечисления кодов ошибок

Я пытался закодировать следующее, но я не знаю, как получить доступ к структуре через код ошибки, который я указал. Ниже мой код, пожалуйста, игнорируйте неиспользуемые переменные. Пожалуйста, помогите мне спасибо.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


/*  ASCII Value Definitions */
#define ASCII_NULL 0x00
#define ASCII_HT 0x09
#define ASCII_NL 0x0A
#define ASCII_CR 0x0D
#define ASCII_SP 0x20
#define ASCII_HASHTAG 0x23


#define COLOR_COMPONENTS 3


enum _error_definition {
    E_SUCCESS = 0,
    E_INPUT_FILE_ERROR = -1,
    E_OUTPUT_FILE_ERROR = -2,
    E_INVALID_FORMAT = -3,
    E_INVALID_DIMENSIONS = -4,
    E_ALLOCATION_ERROR = -5,
    E_FILE_READ_ERROR = -6,
    E_FILE_WRITE_ERROR = -7
};

/* type to provide in your API */
typedef _error_definition error_t;

struct _errordesc {
    int code;
    char *message;
} errordesc[] = {
    {E_SUCCESS, "No Error\n"},
    {E_INPUT_FILE_ERROR, "Error: Invalid input file\n"},
    {E_OUTPUT_FILE_ERROR, "Error: Invalid output file\n"},
    {E_INVALID_FORMAT, "Error: Invalid file format\n"},
    {E_INVALID_DIMENSIONS, "Error: Invalid dimensions\n"},
    {E_ALLOCATION_ERROR, "Error in allocating image buffer\n"},
    {E_FILE_READ_ERROR, "Error in reading the image data\n"},
    {E_FILE_WRITE_ERROR, "Error in writing to file\n"}
};

void cleanUpBeforeExit(FILE *inputFile, FILE *outputFile, char *fileBuf, int error)
{
    printf(errordesc[error].message);
    if(inputFile) fclose(inputFile);
    if(outputFile) fclose(outputFile);
    if(fileBuf) free(fileBuf);
    //exit(errordesc[error].code);
}

int main(int argc, char *argv[])
{
    FILE            *infp = ASCII_NULL;
    FILE            *outfp = ASCII_NULL;
    char            outfname[256];
    int             err;
    int             datasize; 
    int             num;
    int             x;
    int             y;
    char            *datap = ASCII_NULL;
    unsigned char   pixel[3];   // R, G, B
    int             para[3];
    unsigned char   *p;
    char            magic[10];

    cleanUpBeforeExit(infp, outfp, datap, E_OUTPUT_FILE_ERROR);
    getchar();

}

1 Ответ

0 голосов
/ 03 мая 2018

Из-за способа определения элементов errordesc[] можно использовать отрицательное значение элемента code элементов errordesc в качестве индекса массива errordesc для доступа к message часть структурной переменной.

Например, с кодом error в функции cleanUpBeforeExit().

printf("\n%s", errordesc[-error].message);

вместо

printf(errordesc[error].message);

Первый напечатает

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