Warum oder warum sollte ich nicht 'UL' verwenden, um unsigned long zu spezifizieren?

9
%Vor%

Ich sehe das auch, wenn ich das erste Element von Arrays auf eine gute Menge referenziere

%Vor%

Kann mir jemand einen Einblick geben, warum ich "UL" brauche, um genau zu spezifizieren, dass dies ein unsigniertes Long ist?

    
BuckFilledPlatypus 13.08.2009, 18:15
quelle

6 Antworten

21
%Vor%

Es ist nur ein anderes Werkzeug in C ++; Wenn Sie es nicht brauchen, verwenden Sie es nicht!

    
AraK 13.08.2009, 18:26
quelle
13

In den von Ihnen bereitgestellten Beispielen wird es nicht benötigt. Suffixe werden häufig in Ausdrücken verwendet, um Genauigkeitsverluste zu vermeiden. Zum Beispiel:

%Vor%

Sie können eine andere Antwort erhalten, wenn Sie das UL-Suffix weggelassen haben, sagen Sie, ob Ihr System 16-Bit-Eingänge und 32-Bit-Leitungen hat.

Hier ist ein weiteres Beispiel, das von Richard Cordens Kommentaren inspiriert wurde:

%Vor%

Auch hier würden Sie eine andere Antwort erhalten, wenn Sie 16 oder 32-Bit-Ganzzahlen hätten, wenn Sie das Suffix nicht gesetzt hätten.

Dieselbe Art von Problem wird mit 32 gegenüber 64-Bit-Ints und Mischen lang und lang lang in Ausdrücken gelten.

    
Brian Neal 13.08.2009 18:34
quelle
10

Irgendein Compiler kann eine Warnung ausgeben, nehme ich an.
Der Autor könnte dies tun, um sicherzustellen, dass der Code keine Warnungen hat?

    
Martin York 13.08.2009 18:26
quelle
5

Tut mir leid, ich weiß, dass das eine ziemlich alte Frage ist, aber ich benutze das oft in C ++ 11 Code ...

ul , d , f sind alle nützlich, um auto -Variablen auf den gewünschten Typ zu initialisieren, z. B.

%Vor%

Überprüfen Sie die cpp-Referenz in numerischen Literalen: Ссылка

    
schanq 01.06.2015 09:05
quelle
4

Sie brauchen es normalerweise nicht, und jeder erträgliche Editor wird genug Unterstützung haben, um die Dinge in Ordnung zu halten. Allerdings sind die Orte, an denen ich es in C # verwende (und Sie sehen diese in C ++):

  • Aufruf einer generischen Methode (Vorlage in C ++), in der die Parametertypen impliziert sind und Sie sicherstellen wollen, dass die eine mit dem unsigned long -Typ aufgerufen wird. Dies passiert ziemlich oft, einschließlich dieser kürzlich:
    Tuple<ulong, ulong> = Tuple.Create(someUlongVariable, 0UL);
    wo ohne UL gibt es Tuple<ulong, int> zurück und wird nicht kompiliert.
  • Implizite Variablendeklarationen mit dem Schlüsselwort var in C # oder dem Schlüsselwort auto , das nach C ++ kommt. Dies ist weniger üblich für mich, weil ich nur var verwende, um sehr lange Deklarationen zu verkürzen, und ulong ist das Gegenteil.
Sam Harwell 13.08.2009 18:25
quelle
1

Wenn Sie sich verpflichtet fühlen, die Art der Konstante aufzuschreiben (auch wenn sie nicht absolut notwendig ist), stellen Sie sicher:

  1. Dass Sie immer daran denken, wie der Compiler diese Konstante in Bits
  2. übersetzt
  3. Wer jemals Ihren Code liest, wird immer wissen, wie Sie die Konstante sahen und dass Sie sie berücksichtigt haben (sogar Sie, wenn Sie den Code erneut scannen)
  4. Sie verbringen keine Zeit, wenn Sie überlegen, ob Sie das 'U' / 'UL' schreiben müssen oder es nicht schreiben müssen

Außerdem verlangen einige Softwareentwicklungsstandards wie MISRA, dass Sie den Typ der Konstante erwähnen, egal was (schreiben Sie mindestens 'U', wenn nicht vorzeichenbehaftet)

Mit anderen Worten, es wird von manchen als eine gute Übung angesehen, den Typ der Konstante zu schreiben, da man sie im schlimmsten Fall ignoriert und bestenfalls Bugs vermeidet, eine Chance vermeidet, dass verschiedene Compiler den Code anders ansprechen und den Code verbessern Lesbarkeit

    
Ran.CohenTawil 08.08.2013 11:45
quelle

Tags und Links