История изменений
Исправление firkax, (текущая версия) :
А да, ты прав, в promotions не по sizeof() конвертация а по rank, которые char < short < int строго, то есть short всегда превращается в int независимо от разрядности. И появляется исключение из «всегда в signed int» - как раз на 16-битной системе unsigned short «превращается» в unsigned int а не в signed. Я про это забыл, поскольку оно реально кажется никаких внешних эффектов не создаёт, считал что при одинаковом sizeof не будет ничего превращаться.
Варнингов из этого кажется никак не сделать.
Исправление firkax, :
А да, ты прав, в promotions не по sizeof() конвертация а по rank, которые char < short < int строго, то есть short всегда превращается в int независимо от разрядности. И появляется исключение из «всегда в signed int» - как раз на 16-битной системе unsigned short «превращается» в unsigned int а не в signed. Я про это забыл, поскольку оно реально кажется никаких внешних эффектов не создаёт, считал что при одинаковом sizeof не будет ничего превращаться.
Варинингов из этого кажется никак не сделать.
Исправление firkax, :
А да, ты прав, в promotions не по sizeof() конвертация а по rank, которые char < short < int строго, то есть short всегда превращается в int независимо от разрядности. И появляется исключение из «всегда в signed int» - как раз на 16-битной системе unsigned short «превращается» в unsigned int а не в signed. Я про это забыл, поскольку оно реально кажется никаких внешних эффектов не создаёт, считал что при одинаковом sizeof не будет ничего превращаться.
Кажется, единственный способ сделать варнинг из этого - это задействовать какое-нить typeof но на 16-битных компиляторах его не было, или автовыведение типов, которого нет и на 32-битных современных (если не C++).
Исправление firkax, :
А да, ты прав, в promotions не по sizeof() конвертация а по rank, которые char < short < int строго, то есть short всегда превращается в int независимо от разрядности. И появляется исключение из «всегда в signed int» - как раз на 16-битной системе unsigned short «превращается» в unsigned int а не в signed. Я про это забыл, поскольку оно реально кажется никаких внешних эффектов не создаёт, считал что при одинаковом sizeof не будет ничего превращаться.
Кажется, единственный способ сделать варнинг из этого - это задействовать какое-нить builtin_typeof но на 16-битных компиляторах его не было, или автовыведение типов, которого нет и на 32-битных современных (если не C++).
Исходная версия firkax, :
А да, ты прав, в promotions не по sizeof() конвертация а по rank, которые char < short < int строго, то есть short всегда превращается в int независимо от разрядности. И появляется исключение из «всегда в signed int» - как раз на 16-битной системе unsigned short «превращается» в unsigned int а не в signed. Я про это забыл, поскольку оно реально кажется никаких внешних эффектов не создаёт, считал что при одинаковом sizeof не будет ничего превращаться.