Gestione delle richieste di limiti nella libreria C incorporata

3

Al momento stiamo costruendo una libreria in C che si configura dalle tabelle in EEPROM.

Questo lascia comunque la possibilità che qualche chiamante richieda un campo che è fuori limite, e la domanda allora è, cosa possiamo fare a riguardo?

  • Abbiamo pensato a un optional qui, ma dal momento che stiamo implementando il nostro codice di errore, il chiamante deve ricordarsi attivamente di controllare questo valore, facilitando così la sua mancanza.

  • Un'altra opzione sarebbe semplicemente l'arresto anomalo del sistema, che impedirebbe al sistema di funzionare con una configurazione non valida, ma sarebbe indesiderabile perché potrebbe mettere il sistema in un ciclo di avvio e farebbe scattare il nostro sistema di test unitario.

  • Avere un enum che limita le opzioni di input potrebbe anche funzionare, se non fosse che non sappiamo in anticipo quante voci saranno presenti nelle tabelle e l'enumerazione produrrebbe un sacco di confusione.

Qualcuno ha altre idee su come gestirlo?

    
posta bemk 21.08.2017 - 11:21
fonte

1 risposta

6

since we're implementing our own error code, the caller has to actively remind themselves to to check this value, making it easy to miss.

Perché non progettare l'API in modo che diventi difficile per il chiamante perdere un errore?

Ad esempio:

  • progetta la tua funzione in modo che non restituisca solo il risultato dell'operazione, ma anche esplicitamente un codice di errore (ad esempio, con un ulteriore parametro "out" o restituendo un valore struct con una combinazione di risultato e codice di errore, invece di un tipo primitivo)

  • fai una dichiarazione chiara nei documenti API che questo codice di errore deve essere controllato

Rendi anche più facile per il chiamante scoprire i limiti corretti:

  • fornisce una funzione nell'API per recuperare il limite superiore corretto (e anche per il limite inferiore, se non sempre è zero) in fase di esecuzione
  • dai un esempio nei documenti su come utilizzare correttamente questa funzione.

Questo probabilmente è tutto ciò che puoi fare qui. Se poi un chiamante ignora ancora il codice di errore e ignora anche la funzione limiti: non è colpa tua.

    
risposta data 21.08.2017 - 13:28
fonte

Leggi altre domande sui tag