typedef для хранения указателей в C - PullRequest
5 голосов
/ 23 мая 2010

Размер указателя зависит от арки машины.

Так sizeof (int *) = sizeof (int) или sizeof (int *) = sizeof (long int)

Я хочу использовать пользовательский тип данных int или long int в зависимости от размера указателя.

Я пытался использовать макрос #if, но условие для макросов не позволяет оператору sizeof.

Также при использовании if-else typedef ограничивается областью применения if.

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

Есть ли способ определить ptrtype глобально?

Ответы [ 3 ]

7 голосов
/ 23 мая 2010

В C99 вы можете использовать intptr_t.

4 голосов
/ 23 мая 2010

Традиционным способом сделать это было использование GNU autoconf (или аналогичного) для установки некоторых определений, таких как SIZEOF_VOIDPTR, но если у вас достаточно свежий компилятор, тип intptr_t вполне может быть тем, что вам нужно , (Вам может потребоваться установить некоторые флаги компилятора для включения режима C99; он находится в <stdint.h>.)

3 голосов
/ 23 мая 2010

Конечно, используйте intptr_t или uintptr_t, определенные в <stdint.h>.

...