2010-05-23 7 views
5

El tamaño del puntero depende del arco de la máquina.typedef para almacenar punteros en C

Así sizeof (int *) = sizeof (int) o sizeof (int *) = sizeof (long int)

Quiero tener un tipo de datos personalizado que puede ser int o long int dependiendo de la tamaño de puntero.

He intentado utilizar la macro #if, pero la condición para las macros no permite el operador sizeof.

También al usar if-else, typedef está limitado al alcance de if.

if((sizeof(int)==sizeof(int *)){ 
    typedef int ptrtype; 
} 
else{ 
    typedef long int ptrtype; 
} 
//ptrtype not avialble here 

¿Hay alguna manera de definir ptrtype globalmente?

Respuesta

4

La forma tradicional de hacer esto solía ser usar GNU autoconf (o similar) para configurar algunas definiciones como SIZEOF_VOIDPTR, pero si tiene un compilador suficientemente reciente, el tipo intptr_t bien puede ser lo que desee. (Es posible que deba establecer algunos indicadores del compilador para habilitar el modo C99; está en <stdint.h>).

+0

Gracias, funcionó. – user348382

3

Claro, use intptr_t o uintptr_t se define en <stdint.h>.

+0

Gracias, funcionó. – user348382

7

En C99 puede usar intptr_t.

+0

Y asimismo para uintptr_t –

+0

Gracias, funcionó. – user348382