La conversione da int a int32

Ho un sacco di int in c++ il codice che ho bisogno di cambiare per int32. Stessa cosa con il mio bool. Cosa intestazione devo includere per utilizzare int32 e bool32. Inoltre come faccio a dichiarare questi una volta che li faccio. Sono in grado di sostituire solo l’int con int32?

Per esempio:

int x;

Diventa

int32 x;

Sto ricevendo un sacco di errori quando provo a cambiare da int a int32. Ecco alcuni:

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

error C2086: 'const int x' : redefinition

quelle sono le stesse
almeno per sistemi a 32 bit
E è C, C++ o C++/CLI? Sceglierne uno, non siete la programmazione di tutti e tre.
Allora perché è tagged C e C++?
Su Windows, int è a 32-bit, periodo. Indipendentemente dalla cpu dati o indirizzo di larghezza. Se il codice dipende da Windows comunque, basta tenere int. mai. E io non sono sicuro perché pensi int sempre più grande sarebbe rompere il vostro programma comunque. Se se, il programma ha già bug di rilievo.

OriginaleL’autore Graham | 2011-01-31

3 Replies
  1. 1

    Su windows, si dovrebbe essere in grado di utilizzare il costruito nel tipo __int32. Non ho mai sentito di una versione a 32 bit bool, ma è possibile utilizzare solo typedef.

    Su Windows int già è a 32 bit.
    Capisco che, ma quando si è costruito in un ambiente a 64 bit quindi int diventa a 64-bit. Ho bisogno di essere a 32 bit, non importa l’ambiente. Quello che Dan ha scritto è la soluzione.
    non, int è ancora a 32-bit x64 modalità.
    Beh, penso che hai ragione, ma la norma specifica un minimo di rappresentare int, solo perché è ora, anche se è attualmente su tutti i sistemi ms windows, non significa che è garantito per rimanere in quel modo. Per scrivere portatile sostenibile codice in cui avete bisogno di una dimensione specifica, si dovrebbe davvero utilizzare i dati forniti tipi, anche se è solo per rendere evidente che il codice si romperà se si modifica la dimensione. Cordiali saluti, boost fornisce inoltre portatili tipi che dovrebbe funzionare su tutte le piattaforme <boost.org/doc/libs/1_37_0/boost/cstdint.hpp>
    int è a 32-bit x64, Windows, Linux e Mac OS X che di piacere. Tuttavia, wchar_t è a 32-bit su Windows, ma a 64 bit su Linux/x64 e Mac/x64. Naturalmente, se la portabilità è importante, non si possono fare questi presupposti in generale. Per esempio, è un gravissimo errore pensare che ogni carattere in una stringa a livello è di 2 byte.

    OriginaleL’autore Dan

  2. 10
    <cstdint>

    Se il compilatore supporta, ti int32_t, C99 larghezza fissa di tipo integer.

    Mai sentito parlare di nessun bool32 e non riesco a immaginare che tipo di senso potrebbe anche fare.

    Sì, è possibile sostituire solo int con il tuo tipo così a lungo come il vostro tipo di resta fondamentale e/o ha un costruttore di default/non-implicita costruttore…a seconda dell’utilizzo.

    Perché l’ISO C++98 standard precede ISO C99, un compilatore di supporto <stdint.h> non hanno un corrispondente <cstdint> header C++ (non è un C++ header standard in C++98), in modo da usare <stdint.h> può essere necessario. Se l’utilizzo di VC++ non fornisce l’intestazione a tutti, ma è possibile utilizzare questo: msinttypes.googlecode.com/svn/trunk/stdint.h
    È necessario utilizzare una vecchia versione di VC++, perché VC++ 2010 sicuramente il <cstdint> intestazione.
    Che bello sapere, ma che di fatto non è ancora stato documentato!: msdn.microsoft.com/en-us/library/a7tkse1h.aspx, e di certo, né stdint.h né cstdint sono forniti in qualsiasi versione up-to e tra 2008.

    OriginaleL’autore Crazy Eddie

  3. 1

    Potrebbe essere meglio avere un typedef in luogo del tipo di dati effettivi.

    E. g.

    typedef int my_int;
    ....
    my_int var;

    Diventa:

    typedef int32 my_int;
    ....
    my_int var;

    Questo modo, si può solo cambiare una riga di codice per modificare tutte le istanze di int per int32.

    Ma è troppo tardi, se ho capito correttamente alla domanda. Ha già ints diffuse in tutto il codice.
    Egli potrebbe facilmente trovare/sostituire ” int ” con ” my_int “, quindi aggiungere il typedef.

    OriginaleL’autore Weiser

Lascia un commento