2015-01-21 10 views
6
typedef struct rem{ 
    int addr; 
    char addrbuf[32]; 
} foo; 

die gleichen Ergebnisse Beide Codes zurückgebenWann sollten wir verwenden sizeof mit und ohne Klammern

foo addr; 
printf("size is: %d\n",sizeof addr); 
printf("size is: %d\n",sizeof (foo)); 

Größe: 36

Größe: 36

Aber wenn wir sollten Verwenden Sie sizeof mit und ohne Klammern?

+0

Ähnliche [Was macht sizeof ohne()?] (Http://stackoverflow.com/q/18898736/1708801) –

Antwort

14

Bei Verwendung von sizeof mit einem Typ, benötigen Sie Klammern um den Typ. Wenn Sie es mit einem Ausdruck, Ausdruck verwenden Sie nicht. Aber Sie können sie natürlich auch in diesem Fall einbeziehen, und Sie müssen sich in einem solchen Fall nicht um die Vorrangstellung des Operators kümmern. Mit ungewöhnlichen Operatoren wie diesem würden sich weniger Menschen des Vorrangs sicher sein, also hilft Klarheit.

Also ich würde sagen, es ist vorzuziehen, sie immer zu verwenden.

+0

Das war, was ich dachte, danke für die Beseitigung meiner Zweifel. – cmidi

+7

Nit: Abhängig vom Ausdruck können Sie auch dann noch Klammern benötigen. "sizeof a + b" bedeutet nicht "sizeof (a + b)". (Ich weiß, dass du das auch gemeint hast.) – hvd

+0

@hvd Deshalb habe ich die Rangfolge der Operatoren erwähnt (und jetzt ausgearbeitet). – Angew

10

[expr.sizeof]/1:

Der Operand ist entweder ein Ausdruck, die eine nicht ausgewertete Operand (Ziffer 5), oder ein geklammert Typ-ID.

Daher sind die Klammern nur für Typen erforderlich. Wenn Sie Klammern für Klarheit und Konsistenz bevorzugen (wie ich), können Sie sie immer verwenden, als Klammern um eine Ausdruck Form einer anderen Ausdruck.
Der Operator-Vorrang von sizeof ist nicht sehr bekannt und könnte zu Irritationen führen.

Auch für den Operator müssen Sie immer Klammern verwenden (ein weiterer Grund für Konsistenz).

+0

verursachen Irritationen ... wie was? –

+1

@Meninx Was ist der Wert von 'sizeof 1 * 2'? Ist es intuitiv? – Columbo

+0

@Columbo; Von welchem ​​Standard haben Sie es zitiert? – haccks

Verwandte Themen