C:为什么为 int 参数传递 float/double 文字不会引发警告?

标签 c linux gcc-warning

考虑这段代码:

#include <unistd.h>

int main(void) {
    sleep(.1);
    return 0;
}

我用gcc -Wall sleep.c -o sleep编译它,没有任何警告。 运行它给了我

time ./sleep

real    0m0,001s
user    0m0,001s
sys     0m0,000s

.1 神奇地变成 0,但我的问题是为什么没有警告? 我在 Lubuntu 18.04 中使用库存 gcc 7.3.0

最佳答案

这是一次有效的转换 - 当您将 0.1 转换为 unsigned int 时,小数部分将被丢弃。它本质上相当于sleep(0);。因此编译器不需要发出任何诊断。

但是,gcc 确实有一个选项 -Wconversion其产生:

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);
               ^~~

关于C:为什么为 int 参数传递 float/double 文字不会引发警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53397476/

相关文章:

c - 如何在没有 main() 的情况下编写 quine 程序

C - 逐行读取文本文件到指针数组,得到 BAD_ACCESS

linux - 在 CentOS 6.2 上更新 GCC

c - 如何在 utmp.h 中打印 utmp 结构体的数据?

c++ - GCC -Wuninitialized 不警告未初始化的结构

python - cython结构,从python到cython的字符串

c - 包含文件的图表

c - 如何在Linux中使用串口读取字符

linux - 在 Linux 11.04 上安装 TBB

c - 警告 : array subscript has type ‘char’ [-Wchar-subscripts]