if (0 == strcmp(val1,val2)) or (strcmp(val1,val2) == 0)
vs
if(! strcmp(val1,val2))
Qualche studio o guida di stile che supporti uno di questi stili rispetto all'altro?
La mia preferenza è strcmp (x, y) == 0. La ragione di questo è che questo stile usa lo stesso operatore che sarebbe naturalmente usato nell'espressione x == y (che confronta solo i puntatori per l'uguaglianza e quindi non fai quello che vuoi)
Inoltre, puoi fare anche confronti di disuguaglianza: se vuoi controllare se x < y, puoi farlo con strcmp (x, y) < 0. L'operatore è lo stesso.
Ora, l'unica ragione per 0 == strcmp (x, y) è che alcuni vecchi compilatori potrebbero non avvisare se si usa l'operatore = in un'istruzione if. Il problema con questo metodo è che se vuoi controllare x < y, lo fai da 0 > strcmp (x, y) in modo che l'operatore sia passato all'operatore opposto. Per nulla intuitivo. Poiché i compilatori moderni mettono in guardia su "if (x = 0)" non vi è alcun motivo per utilizzare queste cosiddette "condizioni Yoda".
Inoltre,! strcmp (x, y) assomiglia a "x non uguale a y", che non è quello che fa. Quindi, consiglierei di non usare il! operatore con strcmp ().
Un mnemonico che trovo utile è "non significa nulla" ogni volta che sto convertendo un intero in un bool.
Per quanto riguarda l'innaturale, sfortunatamente devi superarlo, perché è un esempio di uso idiomatico della lingua.
Se ti è permesso definire funzioni di utilità, puoi avvolgere l'intera cosa in nuove funzioni come bool Equals(...)
e bool EqualsIgnoreCase(...)
, il che renderebbe felice un programmatore C # -turns-C ++.
Tuttavia, a meno che l'intero team non sia d'accordo, e gli stakeholder del progetto accettano anche la conseguenza che la base di codice non è conforme agli idiomi C ++, è strongmente sconsigliato prendere in prestito gli idiomi di una lingua diversa. Impedisce agli stakeholder di scegliere di open-source il progetto, o rende difficile reclutare sviluppatori C ++ più esperti nel progetto.
Leggi altre domande sui tag coding-style c++ c