Подтвердить что ты не робот

"Uint32", "int16" и тому подобное; являются ли они стандартными С++?

Я новичок в С++, но у меня есть основа фундамента. При чтении другого кода я столкнулся с использованием "Uint32" (в разных заглавных буквах) и схожими типами данных, но я не могу найти документацию, в которой они упоминаются. Я понимаю, что "Uint32" представляет собой unsigned int с 32 битами, но мой компилятор этого не делает. Я использую visual С++ express, и он не распознает какую-либо его форму из того, что я могу сказать.

Есть ли компиляторы, которые по умолчанию считывают эти типы данных, или эти программисты объявили их самими как классы или константы #define?

Я могу понять, как использовать их, чтобы точно знать, как долго будет ваше целое число, поскольку нормальное объявление, похоже, меняется в зависимости от системы. Есть ли другие плюсы или минусы, которые они используют?

4b9b3361

Ответ 1

Visual С++ не поддерживает целые типы фиксированной ширины, поскольку в нем нет поддержки для C99. Ознакомьтесь с ответами на мой вопрос по этому вопросу для различных вариантов, которые вы используете для их использования.

Ответ 2

Unix-платформы определяют эти типы в stdint.h, это предпочтительный метод обеспечения размера шрифта при написании переносимого кода.

Платформы Microsoft не определяют этот заголовок, что является проблемой при переходе на межплатформенную платформу. Если вы больше не используете Boost Integer Library, я рекомендую получить Paul Hsieh портативный stdint.h реализация этого заголовка для использования на платформах Microsoft.

Обновление: Visual Studio 2010 и более поздние версии определяют этот заголовок.

Ответ 3

Заголовочный файл C99 stdint.h определяет typedefs этого типа формы uint32_t. Насколько я знаю, стандартный С++ не предоставляет версию cstdint этого символа в пространстве имен std, но некоторые компиляторы могут, и обычно вы сможете включать заголовок C99 из кода на С++. Следующая версия С++ предоставит заголовок cstdint.

Вы часто увидите код от других людей, которые используют нестандартные формы этой темы, такие как uint32_t или Uint32 или Uint32 и т.д. Они обычно просто предоставляют один заголовок, который определяет эти типы в проекте, Вероятно, этот код был изначально разработан давно, и они никогда не беспокоились, чтобы sed заменил определения, когда компиляторы C99 стали обычным явлением.

Ответ 4

Основная причина их использования заключается в том, что вам не нужно беспокоиться о каких-либо возможных проблемах, возникающих при переключении между 64-битной и 32-разрядной ОС.

Кроме того, если вы взаимодействуете с любым устаревшим кодом, который вам был назначен для 32-битного или даже 16-битного, то он также избегает потенциальных проблем.

Ответ 5

Попробуйте UINT32 для Microsoft.

В верхнем регистре ясно, что это определяется как макрос. Если вы попытаетесь скомпилировать другой компилятор, который еще не содержит макрос, вы можете определить его самостоятельно, и ваш код не должен меняться.

Ответ 6

uint32 et al. определяются макросами. Они решают историческую проблему с переносимостью, поскольку на платформах практически нет гарантий (обратно, когда там больше вариантов платформы, чем сейчас) от того, сколько бит вы получите, когда попросите ввести int или short. (Один из ныне несовместимых компиляторов C для Mac предоставил 8-битные шорты!).