У меня есть древние воспоминания о написании кода на C, например:
long value = 0;
в старые дурные времена Win16 и заканчивалось тем, что value
был только наполовину инициализирован: то есть младшие 16 бит были 0
, а верхние 16 бит были любыми случайными битами, которые были в этом месте в памяти. Таким образом, я стал условно писать:
long value = 0L;
Требуется ли это в наши дни под C99 и / или C ++? Я знаю, что ILP32 указывает, что int
и long
являются 32-разрядными, но предположим, что мы используем, скажем, LP64, где int
s являются 32-разрядными, а long
s - 64-разрядными. Требуются ли суффиксы или современные формы C и C ++ неявно расширяют литералы до длины переменной, которой они назначаются?
Как насчет беззнаковых значений? То есть это требуется?
unsigned long value = 0UL;