Я хочу иметь следующие размеры, когда я компилирую (с помощью Visual C++ 2015 и/или Intel C++ 16,0)x86-64 MSVC++/Intel C++ изменение размера междунар, длинный и т.д.
- обугленного 32 бита без знака (для UTF-32 символов)
- коротких 32 бита
- INT 64 бит
- длину 128 бит
- указателей и size_t 64 бита (которые они в настоящее время)
Можно ли это изменить? Мое текущее решение использует макросы:
#define int int64_t
#define char char32_t // Is this unsigned?
#define short int32_t
#define long __int128
Но есть проблемы, как «ИНТ основных» не работает ... И я не могу определить «подписанный» ИНТ «неподписанные Int» и т.д., как макроимена не может иметь пробелов
EDIT: Причина, по которой я хочу это сделать, - улучшить удобочитаемость (поэтому мне не нужно писать int64_t ...), а также сделать любой код, который я использую, который использует int/char/short/long, чтобы автоматически обновлять (при перекомпиляции) использование 64/32/32/128 бит без необходимости изменять его напрямую.
Единственный способ заставить 'signed int' вести себя так, как вы ожидаете, это изменить компилятор. Который, будучи Microsoft, вы не сможете. –
То, что вы пытаетесь сделать, похоже на идею _spectacularly bad_ для начала. Он пахнет [проблемой X Y] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Не могли бы вы изменить свой вопрос, объясняя _why_ вы хотите это сделать? – jbm
В стандарте явно указано * «Единица перевода не должна содержать имена #define или #undef, лексически идентичные ключевым словам» *. 'int main '- это только одна проблема - рассмотрите, что происходит с любым стандартным заголовком, который вы включаете. –