2015-12-14 16 views
6

Ich möchte bestätigen, dass ein unsigned int streng positiv ist. Ich war zwischen den beiden folgenden Optionen diskutiert:Ist Uint strikt positiv

unsigned int i = 1; 
assert(i > 0); /*option 1*/ 
assert(i != 0); /*option 2*/ 

ich mich in einem Dilemma stecken Buridan's ass gefunden. Gibt es einen Grund, das eine dem anderen vorzuziehen?

+3

'unsigned int' kann' 0' sein. – birryree

+1

Ich weiß. Deshalb muss ich behaupten. –

+0

Es kann immer noch 0 – ColdSteel

Antwort

6

assert(i > 0); ist für andere Programmierer besser lesbar, dass i für positive Ganzzahlen überprüft wird und einschließlich der Fall für .


Hinweis: Als Joachim wies in seiner comment, die im Auge behalten, dass , wenn das Makro NDEBUG zur Zeit definiert wurde <assert.h> wurde zuletzt das Makro assert() keinen Code generiert, enthalten, und daher tut gar nichts .

3

Ich ziehe

assert(i > 0); /*option 1*/ 

aus 2 Gründen.

Erstens ist es ein Zeichen weniger, und Zeichen kosten Geld.

Zweitens, wenn Ihre Absicht ist zu zeigen, die Zahl ist streng positiv dies macht es klar, auch ohne das Wissen, dass ich ein unsigned int ist.

+0

Nun, Sie müssen wissen, dass es nicht signiert ist, also wissen Sie, dass Sie nicht für negative Werte testen müssen. –

+1

Mein Punkt war, wenn ich möchte, dass die Nummer streng positiv ist, ist es streng positiv mit Option 1, ob die Nummer nicht signiert ist oder nicht. Mit Option 2 ist es auch streng positiv, aber ich brauche eine zusätzliche Information, um dies zu bestätigen, wenn ich den Code betrachte. –

2

Beide sicherlich den gleichen Code erzeugen, so , was die Gesamtfunktion Ziel ist die bessere Auswahl vermittelt:

unsigned int i = ...; 
assert(i > 0); /*option 1*/ 
assert(i != 0); /*option 2*/ 

Option 1 besser funktioniert in den meisten Fällen, da es eine positive Behauptung ist: Was sollte der Wert sein vs. was es nicht sein sollte. Normalerweise ist das einfacher zu verstehen. Auch wenn die arithmetische Natur von i getestet wird, ist dies der Weg zu gehen.

Option 2 funktioniert besser in begrenzten Fällen, wenn i ausschließlich für seine Null oder Nicht-Null-Ness verwendet wird - insbesondere wenn es sich um eine Sammlung von logischen Bits handelt, deren arithmetischer Wert irrelevant ist.

Verwandte Themen