Inspiriert von diesem question, ich habe:Warnung vor nur einem Bitfeld statt an beiden?
#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);
}
und ich bekomme:
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
Ich glaube, ich verstehe, warum beide bitfields versagen, ihre Werte halten (aus dieser answer), aber ich don verstehe nicht, warum der Compiler nur über 2
warnt, statt 1
auch! Irgendwelche Ideen?
ich in meinem Mac bin mit:
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
In einem alten Linux-System mit gcc Version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5), bekam ich keine ähnliche Warnung.
In einer Debian-Installation, mit GCC-Version 4.9.2 (Debian 4.9.2-10), habe ich keine entsprechende Warnung erhalten!
fyi g ++ 5.1.0 erzeugt die 2 Warnungen, wie erwartet. 2 * 'warning: Überlauf bei impliziter Constant Conversion [-Woverflow]' –