2016-03-27 4 views
0

ich die folgenden Größen haben, wenn ich kompilierenx86-64 MSVC++/Intel C++ Wechsel Größe des int, wollen lange, etc

  • char 32 Bits ohne Vorzeichen (Visual C++ 2015 und/oder Intel C++ 16.0 verwenden) (für UTF-32 Zeichen)
  • Kurz 32 Bits
  • int 64 Bits
  • lang 128 Bits
  • Pointers und size_t 64 Bits (die sie aktuell sind)

Kann das geändert werden? Meine aktuelle Lösung verwendet die Makros:

#define int int64_t 
#define char char32_t // Is this unsigned? 
#define short int32_t 
#define long __int128 

Aber es hat Probleme, wie „int main“ funktioniert nicht ... Und ich kann nicht „signed int“ „unsigned int definiert“ usw. als Makronamen kann keine Leerzeichen haben

EDIT: Der Grund, warum ich dies tun will, ist die Lesbarkeit zu verbessern (so muss ich Int64_t nicht schreiben ...) und auch um Code zu verwenden, der int/char verwendet/short/long, um (bei der Neukompilierung) automatisch auf 64/32/32/128 Bit zu aktualisieren, ohne es direkt ändern zu müssen.

+0

Die einzige Möglichkeit, "signed int" wie erwartet zu verhalten, besteht darin, den Compiler zu ändern. Was Microsoft ist, werden Sie nicht können. –

+0

Was Sie versuchen zu tun, sieht zunächst wie eine spektakuläre schlechte Idee aus. Es riecht nach [einem X Y-Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Könnten Sie Ihre Frage bearbeiten und erklären, warum Sie das machen wollen? – jbm

+0

Der Standard besagt ausdrücklich: * "Eine Übersetzungseinheit darf nicht #define oder #undef Namen lexikalisch identisch mit Keywords" * sein. 'int main' ist nur ein Problem - überlegen Sie, was mit einem Standard-Header passiert, den Sie einschließen. –

Antwort

0

Es ist nicht notwendig, Makro zu verwenden, wenn Sie unsigned int definieren, können Sie Code wie folgt schreiben:

typedef unsigned int UINT;

jetzt können Sie auch Code wie folgt schreiben:

#define UINT balabala

1

Sie können dies nicht tun. Der einzige Weg, dies zu erreichen, ist, indem Sie Ihre eigenen Typen einführen und stattdessen verwenden.

Auch bei der Verwendung von Typen wie int müssen Sie nicht auf die zugrunde liegende Größe abgesehen von dem, was der Standard sagt (d. H. Im Fall von int die einzige Garantie ist, dass es mindestens 16 Bits). Was Sie erreichen möchten, ist eine Abhängigkeit, die Sie nicht haben sollten, und das würde Sie völlig unportabel machen. Außerdem sehe ich nicht, warum int64_t weniger lesbar wäre als mit int. Außerdem würde die von Ihnen gewünschte Neudefinition für andere Entwickler unerwartet werden und somit Fehler verursachen. Wenn Sie Ihre eigenen Typen verwenden, wird deutlich, dass die Typen unterschiedlich sind.