определение типа для хранения указателей в C

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

Так sizeof (интервал*) = sizeof (интервал) или sizeof (интервал*) = sizeof (длинное целое)

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

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

Также при использовании, если еще, определение типа ограничено объемом если.

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

Там какой-либо путь состоит в том, чтобы определить ptrtype глобально?

5
задан user348382 23 May 2010 в 17:46
поделиться

3 ответа

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

4
ответ дан 18 December 2019 в 13:11
поделиться

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

7
ответ дан 18 December 2019 в 13:11
поделиться

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

3
ответ дан 18 December 2019 в 13:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: