Inspiré de cette question, j'ai:Attention sur un seul bitfield, au lieu des deux?
#include<stdio.h>
struct st
{
int a:1;
int b:2;
};
int main()
{
struct st obj={1, 2};
printf("a = %d\nb = %d\n",obj.a,obj.b);
}
et je reçois:
Georgioss-MacBook-Pro:~ gsamaras$ gcc -Wall main.c
main.c:10:26: warning: implicit truncation from 'int' to bitfield changes value
from 2 to -2 [-Wbitfield-constant-conversion]
struct st obj={1, 2};
^
1 warning generated.
Georgioss-MacBook-Pro:~ gsamaras$ ./a.out
a = -1
b = -2
Je pense que je comprends pourquoi les deux bitfields ne parviennent pas à tenir leurs valeurs (selon ce answer), mais je ne ne comprends pas pourquoi le compilateur avertit sur 2
seulement, au lieu de 1
aussi! Des idées?
J'utilise dans mon Mac:
Georgioss-MacBook-Pro:~ gsamaras$ gcc -v
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 8.1.0 (clang-802.0.38)
Target: x86_64-apple-darwin16.3.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
Dans un ancien système Linux, avec la version gcc 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5), je suis pas d'avertissement connexe.
Dans une installation Debian, avec gcc version 4.9.2 (Debian 4.9.2-10), je n'ai reçu aucun avertissement associé!
fyi g ++ 5.1.0 produit les 2 avertissements comme prévu. 2 * 'avertissement: débordement dans la conversion constante implicite [-Woverflow]' –