Препроцессор:Как правильно задавать константы/литералы определенного интгр типа?
От: Marty Пират  
Дата: 16.04.19 21:23
Оценка:
Здравствуйте!

В итоге вроде бы решил самым простым способом, без изысков
Хочу:
сonstexpr uintptr_t a = 140721923966320;
cout<<a;



Но: почему-то полагал, что не сработает, и что надо добавить суффикс типа (не "типа", а типа):
uintptr_t ptr = 12345ull;


Размер указателя зависит от платформы, поэтому решил:
#ifdef WIN32 /* например */
    #define UPTR_SUFF ul
#elif defined(WIN64)
    #define UPTR_SUFF ull
#endif

#define DECLARE_CONST_ADDR_SUFFIX_HELPER(suff) suff

// не работает
#define DECLARE_CONST_ADDR(addr, suff)         addr ## DECLARE_CONST_ADDR_SUFFIX_HELPER(suff)
// так тоже
#define DECLARE_CONST_ADDR(addr, suff)         addr ## suff


Как быть?

В итоге-то вроде работает по самому простому пути, и в случае чего проще переопределить сам макрос DECLARE_CONST_ADDR или есть вариант задать с помощью UPTR_SUFF?
А если слева будет какой-то объект, который хочет другое, например short unsigned?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.