Есть ли портативный способ узнать, определяется ли uintptr_t в stdint.h?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Есть ли портативный способ узнать, определяется ли uintptr_t в stdint.h?

Сообщение Anonymous »

Преамбула: я хочу преобразовать указатель в целочисленный тип, например, Чтобы проверить выравнивание. uintptr_t кажется правильным типом, но он гарантируется только в C, а не в C ++ (или C ++ 11)
для следующего кода:

Код: Выделить всё

#include 
#ifndef I_WONDER_IF_UINTPR_T_IS_DEFINED
typedef unsigned long uintptr_t;
#endif

template 
bool isAligned(unsigned char* p) ///Checks alignment with respect to some data type
{
return !((uintptr_t) p % sizeof(T));
}

template bool isAligned(unsigned char* p);
template bool isAligned(unsigned char* p);
template bool isAligned(unsigned char* p);
2 Вопросы:

[*] Существует ли волшебное и гарантированное слово, которое я могу использовать там, где я помещаю i_wonder_if_uintpr_t_is_defined ?
Я должен просто использовать USIGNED LOLL и забыть об этом? /> сгенерированная сборка (когда доступен uintptr_t) < /p>
Примечание 1: Я знаю, чем в C ++ 11 Я должен использовать Alignof < /code> вместо размера < /code>

Примечание 2: мне известно об этом обсуждении: vs < /p.>

Подробнее здесь: https://stackoverflow.com/questions/261 ... n-stdint-h
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»