Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>>>для чего, например, argc в main имеет знаковый тип? В каких случаях он может становиться отрицательным?
N>>Это чисто наследие самых ранних реализаций, не захотели менять тип ради мелочи.
ЕМ>Значения времени/даты в tm, значение смещение в va_list (и приведение результата sizeof к int в va_arg) и подобное — тоже "чисто наследие"?
Уже нет, мне кажется. Именно в struct tm можно было бы хранить и без знака, но зачем, если там значения гарантированно меньше соответствующего максимума даже в исходной 16-битке?
Виндовая SYSTEMTIME, для сравнения, имеет полями сплошные WORD. Они исходили из другой логики.
Но, как только начинается вопрос про то, что даты надо вычитать, уже приходится переводить к знаку (об этом тебе уже написали рядом). Ну и зачем эти лишние конверсии?
Для argc я просто не вижу, зачем его можно было бы уводить в минус (особенно с учётом роли argv[0]). Для компонентов даты и времени этот смысл уже есть.