Размер указателя зависит от дуги машины.
Так sizeof (интервал*) = sizeof (интервал) или sizeof (интервал*) = sizeof (длинное целое)
Я хочу иметь пользовательский тип данных, который является или международным или длинным целым в зависимости от размера указателя.
Я пытался использовать макрос #if, но условие для макросов не позволяет sizeof оператор.
Также при использовании, если еще, определение типа ограничено объемом если.
if((sizeof(int)==sizeof(int *)){
typedef int ptrtype;
}
else{
typedef long int ptrtype;
}
//ptrtype not avialble here
Там какой-либо путь состоит в том, чтобы определить ptrtype глобально?
Традиционный способ сделать это раньше заключался в использовании GNU autoconf (или аналогичного) для настройки некоторых определений, таких как SIZEOF_VOIDPTR
, но если у вас достаточно свежий компилятор тип intptr_t
вполне может быть тем, что вам нужно. (Возможно, вам потребуется установить некоторые флаги компилятора, чтобы включить режим C99; он находится в
.)
Конечно, используйте intptr_t
или uintptr_t
, определенные в
.