Что такое size_t в C?

Я бы использовал WCF для .NET 3.5 для этой задачи, он будет более масштабируемым. Я использую WCF для многих своих работ и безупречен. Хорошо, что вы можете делиться своими данными на любой платформе.

http://msdn.microsoft.com/en-us/netframework/aa663324.aspx

558
задан Peter Mortensen 11 December 2013 в 11:35
поделиться

3 ответа

Из Википедии :

Согласно в соответствии со стандартом ISO C 1999 г. (C99), size_t представляет собой целое число без знака длиной не менее 16 бит (см. разделы 7.17 и 7.18.3 ).

size_t - это беззнаковый тип данных , определенный несколькими стандартами C / C ++, например стандарт C99 ISO / IEC 9899, ​​ который определен в stddef.h . 1 Его можно дополнительно импортировать, включив stdlib.h , поскольку этот файл внутренне вложенный включает stddef. h .

Этот тип используется для представления размера объекта. Библиотечные функции , которые принимают или возвращают размеры, ожидают, что они будут иметь тип или возвращаемый тип size_t . Кроме того, наиболее часто используемый оператор на основе компилятора sizeof должен возвращать постоянное значение , совместимое с size_t .

Как следствие, size_t - это тип, который гарантированно содержит любой индекс массива.

439
ответ дан 22 November 2019 в 22:05
поделиться

На странице руководства для types.h указано:

size_t должен быть целым числом без знака

22
ответ дан 22 November 2019 в 22:05
поделиться

size_t - беззнаковый тип. Таким образом, он не может представлять отрицательные значения (<0). Вы используете его, когда что-то считаете, и уверены, что это не может быть отрицательным. Например, strlen () возвращает size_t , потому что длина строки должна быть не менее 0.

В вашем примере, если ваш индекс цикла будет всегда больше 0, может иметь смысл использовать size_t или любой другой тип данных без знака.

Когда вы используете объект size_t , вы должны убедиться, что во всех контекстах, в которых он используется, включая арифметику, вам нужны неотрицательные значения. Например, предположим, что у вас есть:

size_t s1 = strlen(str1);
size_t s2 = strlen(str2);

и вы хотите найти разницу длин str2 и str1 . Вы не можете сделать:

int diff = s2 - s1; /* bad */

Это потому, что значение, присвоенное diff , всегда будет положительным числом, даже когда s2 , потому что вычисление выполняется с типами без знака. . В этом случае, в зависимости от вашего варианта использования, вам может быть лучше использовать int (или long long ) для s1 и s2 .

В C / POSIX есть некоторые функции, которые могут / должны использовать size_t , но этого не делают по историческим причинам. Например, второй параметр для fgets в идеале должен быть size_t , но это int .

212
ответ дан 22 November 2019 в 22:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: