C'è un modo per rendere C un po 'più consapevole dei tipi e assicurare la sicurezza del tipo?
Considerate questo:Tipo di sicurezza in C
typedef unsigned cent_t;
typedef unsigned dollar_t;
#define DOLLAR_2_CENT(dollar) ((cent_t)(100*(dollar)))
void calc(cent_t amount) {
// expecting 'amount' to semantically represents cents...
}
int main(int argc, char* argv[]) {
dollar_t amount = 50;
calc(DOLLAR_2_CENT(amount)); // ok
calc(amount); // raise warning
return 0;
}
C'è un modo per rendere il codice di cui sopra al-almeno alzare avvertimento dal gcc?
So che posso usare C-structs per avvolgere unsigned
s e ottenere il risultato desiderato, mi stavo chiedendo se c'era un modo più elegante per farlo.
Può essere un po 'di più?
Fai '' cent_t' e dollar_t' una struttura, con un solo membro? – Leandros
C non è davvero un linguaggio sicuro per i caratteri. Il modo più semplice per * emulare * sicurezza del tipo è usare le strutture. –
Dichiarare tutte le funzioni correttamente prima dell'uso (elenco completo degli argomenti delle funzioni, ecc.). Passa le strutture piuttosto che i tipi di base (o typedef dei tipi di base). Preferisci funzioni in linea su macro. Aumenta i livelli di avviso sul tuo compilatore. – Peter