c语言long和double转换,c-警告:从“ long int”转换为“ double”可能会更改其值

我的代码如下:

#include

#include

using namespace std;

int main(int argc, char** argv) {

if(argv[0])

argc++;

struct timeval m_timeEnd, m_timeCreate, m_timeStart;

long mtime, alltime, seconds, useconds;

gettimeofday(&m_timeStart,NULL);

sleep(3);

gettimeofday(&m_timeCreate,NULL);

sleep(1);

gettimeofday(&m_timeEnd, NULL);

seconds = m_timeEnd.tv_sec - m_timeStart.tv_sec;

useconds = m_timeEnd.tv_usec - m_timeStart.tv_usec;

mtime = (long) (((seconds) * 1000 + useconds/1000.0) + 0.5);

seconds = useconds = 0;

seconds = m_timeEnd.tv_sec - m_timeCreate.tv_sec;

useconds = m_timeEnd.tv_usec - m_timeCreate.tv_usec;

alltime = (long) (((seconds) * 1000 + useconds/1000.0) + 0.5);

printf("IN=%ld ALL=%ld milsec.\n", mtime, alltime);

}

我正在编译

g++ -W -Wall -Wno-unknown-pragmas -Wpointer-arith -Wcast-align

-Wcast-qual -Wsign-compare -Wconversion -O -fno-strict-aliasing

并且我有一些警告需要消除.怎么样?

a1.cpp:21: warning: conversion to 'double' from 'long int' may alter its value

a1.cpp:21: warning: conversion to 'double' from 'long int' may alter its value

a1.cpp:25: warning: conversion to 'double' from 'long int' may alter its value

a1.cpp:25: warning: conversion to 'double' from 'long int' may alter its value

解决方法:

这应该工作:

mtime = (long)(((long long)seconds*1000000 + useconds + 500)/1000);

始终以相同方式转换表达式.

您看到警告的原因是您的表达式从long转换为double并重新进行数学运算.您可以通过重新整理一下表达式以完全位于整数类型中来避免这种情况.请注意转换成long long以避免溢出(谢谢,Nick).

编辑您可以进一步简化此操作并消除转换:

mtime = seconds*1000 + (useconds + 500)/1000;

标签:g,compiler-warnings,linux,c-4

来源: https://codeday.me/bug/20191201/2083137.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值