Compiler warnings, overflow

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi, hope this is the right list.

Here is my code and output, at the bottom of the e-mail. y is "correct", w and z obviously have problems - multiplying two 32-bit integers "hoping" the result would be correct assigning to 64-bit - I guess it is the same problem as double oneThird= 1/3;  the result being zero, and not 0.3333.

I was wondering if there is any strict warning that would flag the w and z assignments below, or the 1/3 above - the whole right hand side is evaluated as a 32-bit integer number, and assigned to a 64-bit integer or double. Not advocating this should be a default, but turning it on would help me detect some flaws in the code. Took me hours to catch a similar bug in my code, trying to solve a sparse system that has hundreds of millions of variables...

Thanks!
    Ricardo

laplace utils % cat ovr.c
#include <stdio.h>
int main()
{

    unsigned int x = 1015625426;
    unsigned int t = sizeof(double);

    size_t  y = x * sizeof(double);
    size_t  w = x << 3;
    size_t  z = x * t;

    printf("y= %zd  w = %zd z = %zd\n", y, w, z);
}
laplace utils % gcc -Wall -o ovr ovr.c
laplace utils % ovr
y= 8125003408  w = 3830036112 z = 3830036112






[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux