Значение 6.3.1.1p2, пункт 2 пули - PullRequest
0 голосов
/ 26 ноября 2018

6.3.1.1p2 говорит

В выражении можно использовать следующее, где можно использовать int или unsigned int:

  • Объект или выражение с целочисленным типом (отличным от int или unsigned int), чей ранг целочисленного преобразования меньше или равен рангу int и unsigned int.

  • Битовое поле типа _Bool, int, signed int или unsigned int.

Что является цельювторая точка маркера?

Зачем пропускать целочисленные поля других типов, чей ранг меньше, чем int?

Означает ли это, что я могу сделать, например:

printf("%d\n", (struct{ _Bool x:1; }){0}.x);

но не:

printf("%d\n", (struct{ unsigned short x:1; }){0}.x);

1 Ответ

0 голосов
/ 26 ноября 2018

Предположительно, это из-за 6.7.2.1p5 :

Битовое поле должно иметь тип, который является квалифицированной или неквалифицированной версией _Bool, signed int, unsigned int или какой-либо другой тип, определенный реализацией.Это зависит от реализации, разрешены ли атомарные типы.

Т.е. вы все равно не можете создавать битовые поля других типов переносимым образом.

...