Sto lavorando ad un piccolo programma per animali domestici in C, dove ho una tavola da gioco che consiste in un mazzo di quadrati:
typedef struct _square {
bool checked;
} Square;
typedef struct _board {
Square *squares;
uint8_t width;
uint8_t height;
} Board;
Non voglio che queste strutture siano visibili al pubblico, quindi, invece, voglio scrivere una semplice funzione che controlli se un quadrato è controllato o meno, chiamato square_is_checked
. Ha senso che il tipo restituito sia un bool
(sto assumendo C99 qui).
bool square_is_checked(Board *b, uint8_t row, uint8_t col)
{
return b->squares[(uint16_t)row * b->height + col].checked;
}
Tuttavia, è possibile che un puntatore NULL o una riga e una colonna che non esistono possano essere passati come argomenti. Quindi voglio aggiungere alcuni semplici controlli:
bool square_is_checked(Board *b, uint8_t row, uint8_t col)
{
if (!b) { return ???; }
if (row >= b->height || col >= b->width) { return ???; }
return b->squares[(uint16_t)row * b->height + col].checked;
}
Tuttavia, un bool
è true
o false
- non c'è spazio per la gestione degli errori. Qual è la migliore pratica qui (ad es. Devo riscrivere questa funzione per passare un puntatore a bool
)?