c - C:为什么为 int 参数传递 float/double 文字不会引发警告?
问题描述
考虑这段代码:
#include <unistd.h>
int main(void) {
sleep(.1);
return 0;
}
我编译它时gcc -Wall sleep.c -o sleep
没有任何警告。运行它给了我
时间./睡觉 真正的 0m0,001s 用户 0m0,001s 系统 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);
^~~
推荐阅读
- java - 如何在 Spring-Boot 中使用 SSL 证书并为 Android 客户端生成公钥
- cassandra - cassandra的多节点集群-无法互相闲聊
- c# - AspNetCore 中缺少 Range 标头
- swiftui - DragGesture 没有更新
- php - 错误:在此服务器上找不到请求的 URL /login。(拉拉维尔)
- django - Django 如何在会话中将 JSON 数据保存在视图之外并在视图内检索保存的数据?
- kubernetes - 获取特定的 Kubernetes pod
- monaco-editor - 我应该如何在摩纳哥编辑器中为令牌添加悬停
- python - 如何进行条件 JSON 模式验证
- vue.js - 在动态加载的组件中获取自我