Правильно ли писать size_t num = 0?

#c #integer #unsigned #size-t

#c #целое число #без знака #размер-t

Вопрос:

Я пишу программу на C, в которой я использую size_t для хранения числовых значений, так как в Интернете написано, что size_t может хранить только unsigned значения.

Так можно ли хранить 0 в нем??

 size_t num = 0;
 

Комментарии:

1. Да, вы даже можете хранить -0

2. В каком смысле вы обеспокоены тем, что 0 не является значением без знака? Что тип неприкрашенного целочисленного литерала 0 равен (signed) int ? Или что-то еще?

Ответ №1:

Да, это нормально.

C17 6.7.9 (11):

Инициализатором для скаляра должно быть одно выражение, необязательно заключенное в фигурные скобки. Начальным значением объекта является значение выражения (после преобразования); применяются те же ограничения и преобразования типов, что и для простого присваивания, принимая тип скаляра за неквалифицированную версию его объявленного типа.

6.3.1.3 (1) говорит:

Когда значение с целочисленным типом преобразуется в другой целочисленный тип, отличный от _Bool , если значение может быть представлено новым типом, оно остается неизменным.

0 это выражение типа int , значением которого является число ноль. Нулевое значение, безусловно, может быть представлено size_t , так что это то, на что оно инициализируется.

Вы можете написать size_t num = 0U; , если вы предпочитаете, чтобы с эстетической точки зрения совпадали подписи, но эффект от этого тот же.