Consider this code:
JavaScript
x
#include <unistd.h>
int main(void) {
sleep(.1);
return 0;
}
I compile it with gcc -Wall sleep.c -o sleep
with no warnings.
Running it gives me
time ./sleep real 0m0,001s user 0m0,001s sys 0m0,000s
.1
magically becomes 0
, but my question is why no warnings?
I’m using stock gcc 7.3.0 in Lubuntu 18.04
Advertisement
Answer
It’s a valid conversion – the fractional part is discarded when you convert it 0.1
to unsigned int
. It’s essentially equivalent to sleep(0);
. So a compiler is not required to issue any diagnostics.
However, gcc
does have an option -Wconversion
which produces:
JavaScript
gcc -Wall -Wextra -pedantic -Wconversion a.c
a.c: In function ‘main’:
a.c:8:11: warning: conversion from ‘double’ to ‘unsigned int’ changes value from ‘1.0000000000000001e-1’ to ‘0’ [-Wfloat-conversion]
sleep(0.1);
^~~