LINUX.ORG.RU

История изменений

Исправление 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 не будет ничего превращаться.