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

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

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

5 ответов


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


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

typedef unsigned int uint;

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


Я немного расширяя ответы на Эрика, Теобан Soygul и taskinoor

uint не является стандартом.

следовательно, использование вашей собственной стенографии, как это не рекомендуется:

typedef unsigned int uint;

Если вы ищете спецификацию платформы (например, вам нужно указать количество битов, которые занимает ваш int), включая stdint.h:

#include <stdint.h>

покажет следующий стандарт категории целых чисел:

  • типы integer с некой точной ширины

  • целочисленные типы, имеющие по крайней мере определенные заданные ширины

  • самые быстрые целочисленные типы, имеющие по крайней мере определенные заданные ширины

  • целочисленные типы достаточно широкие, чтобы содержать указатели на объекты

  • целочисленные типы, имеющие наибольшую ширину

например,

целочисленные типы точной ширины

имя 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.
Это, очевидно,typedef of unsigned int, но это не объясняет ее полезность.

настоящий вопрос в том,

почему кто-то хочет typedef фундаментальный тип к сокращенному версия?

чтобы сэкономить на печати?
Нет, они сделали это по необходимости.

рассмотрим язык C; язык, который не имеет шаблоны.
Как бы вы стали штамповать свой собственный вектор, который может содержать любой тип?

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

таким образом, вы определили бы свой вектор шаблона:

#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 };