Есть ли разница между uint
и unsigned int
?
Я смотрю на сайте, но все вопросы относятся к С# или C++.
Я хотел бы получить ответ относительно языка Си.
Если это уместно, обратите внимание, что я использую GCC под Linux.
Есть ли разница между uint
и unsigned int
?
Я смотрю на сайте, но все вопросы относятся к С# или C++.
Я хотел бы получить ответ относительно языка Си.
Если это уместно, обратите внимание, что я использую GCC под Linux.
uint
не является стандартным типом - unsigned int
.
Некоторые системы могут определять uint как typedef.
typedef unsigned int uint;
Для этих систем они одинаковы. Но uint не является стандартным типом, поэтому каждая система может его не поддерживать и, следовательно, не переносима.
Я продюсирую несколько ответов Эрика, Теомана Сойгула и taskinoor
uint не является стандартом.
Следовательно, использование вашей собственной сокращенной строки, как это, не рекомендуется:
typedef unsigned int uint;
удаp >
Если вы посмотрите на специфику платформы (например, вам нужно указать количество бит, которое занимает ваш int), в том числе stdint.h:
#include <stdint.h>
откроет следующие стандартные категории целых чисел:
Целочисленные типы, имеющие определенную точную ширину
Целочисленные типы, имеющие хотя бы определенные указанные ширины
Самые быстрые целочисленные типы, имеющие хотя бы определенные заданные ширины
Целочисленные типы достаточно широкие, чтобы удерживать указатели на объекты
Целочисленные типы с наибольшей шириной
Например,
Точные целые числа
Имя typedef int N_t обозначает целочисленный тип со знаком с шириной N, без битов дополнения и представления с двумя дополнениями. Таким образом, int8_t обозначает знаковый целочисленный тип с шириной ровно 8 бит.
Имя typedef uint N _t обозначает целочисленный тип без знака с ширина N. Таким образом, uint24_t обозначает целочисленный тип без знака с шириной ровно 24 бита.
определяет
int8_t
int16_t
int32_t
uint8_t
uint16_t
uint32_t
unsigned int
- это встроенный (стандартный) тип, поэтому, если вы хотите, чтобы ваш проект был межплатформенным, всегда используйте unsigned int
, поскольку он гарантированно поддерживается всеми компиляторами (следовательно, является стандартным).
Все ответы здесь не говорят о реальной причине uint
.
Очевидно, a typedef
of unsigned int
, но это не объясняет его полезности.
Реальный вопрос:
Почему кто-то хочет напечатать базовый тип с сокращенным версия?
Сохранить при вводе?
Нет, они сделали это по необходимости.
Рассмотрим C-язык; язык, на котором нет шаблонов.
Как бы вы начали штамповать свой собственный вектор, который может содержать любой тип?
Вы можете сделать что-то с указателями void,
но более близкая эмуляция шаблонов заставила бы вас прибегать к макросам.
Итак, вы бы определили свой вектор шаблона:
#define define_vector(type) \
typedef struct vector_##type { \
impl \
};
Объявите свои типы:
define_vector(int)
define_vector(float)
define_vector(unsigned int)
И после поколения, поймите, что типы должны быть одним токеном:
typedef struct vector_int { impl };
typedef struct vector_float { impl };
typedef struct vector_unsigned int { impl };