#include <stdio.h>
int main () {
double num = 5.2;
int var = 5;
printf("%d\t", sizeof(!num));
printf("%d\t", sizeof(var = 15/2));
printf("%d", var);
return 0;
}
Running this program on VS 2010 and GCC 4.7.0 gives the output as 1 4 5 and using Turbo 3.0/4.5 gives 2 4 5 as the result.
From where can we get the exact sizes of the datatypes ?
I did read the following links:link1, link2, link3, link4 and link5 But they were not able to answer my query !
This question is a complicated way to ask why sizeof(bool) is 1 in some compilers and 2 in others. And indeed, the C++ standard does not require the size of bool to be 1, which means that different compilers may allocate a different size for it, and this is the answer to your question.
As for why it doesn't require it to be 1, take a look at this related question about sizeof(bool).
If you are not clear why bool is involved here at all, it's because you invoke the ! operator on a double value, which is the equivalent of checking if it's non-zero, and such a check returns a bool. The other two prints are basically sizeof(int) (because int / int is an int itself) and the value of an integer.