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

Разница между uint и unsigned int?

Есть ли разница между uint и unsigned int? Я смотрю на сайте, но все вопросы относятся к С# или C++. Я хотел бы получить ответ относительно языка Си.

Если это уместно, обратите внимание, что я использую GCC под Linux.

4b9b3361

Ответ 1

uint не является стандартным типом - unsigned int.

Ответ 2

Некоторые системы могут определять uint как typedef.

typedef unsigned int uint;

Для этих систем они одинаковы. Но uint не является стандартным типом, поэтому каждая система может его не поддерживать и, следовательно, не переносима.

Ответ 3

Я продюсирую несколько ответов Эрика, Теомана Сойгула и 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

Ответ 4

unsigned int - это встроенный (стандартный) тип, поэтому, если вы хотите, чтобы ваш проект был межплатформенным, всегда используйте unsigned int, поскольку он гарантированно поддерживается всеми компиляторами (следовательно, является стандартным).

Ответ 5

Все ответы здесь не говорят о реальной причине 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 };