我正在阅读一份用C语言编写的中间件代码,其中他们写了以下内容:
usleep(6*1000*1000);
所以我的问题是:
为什么要像这样编写代码?而不直接写6000000?这样做会对程序的性能产生影响吗?
usleep(6*1000*1000);
所以我的问题是:
为什么要像这样编写代码?而不直接写6000000?这样做会对程序的性能产生影响吗?
usleep()
函数需要传入以“微秒”为单位的参数。
这是将微秒转换成秒的“视觉转换”,不会对代码造成影响,因为任何一个还算过得去的编译器都会在编译时计算出来。
int
和6*1000*1000
可能会发生溢出。 - chux - Reinstate Monica这只是为了让源代码更易于阅读。通过乘法,数字显然是六百万。
由于它评估为常量,编译器将在编译时评估常量,并且编译后的代码不会有任何差异。
int
范围和所使用的数字,可能会导致乘积溢出。(希望会出现警告)没有乘法的常量就不会有这个问题。 - chux - Reinstate Monica很可能,这是为了可读性而这样做的。
看到代码中的6000000
,您可能无法立即看出有多少个零。这个值与60000000
或600000
之间的视觉区别不大。将其拆分后,更容易看清楚。
任何合理的编译器都应该在编译时计算6*1000*1000
,因此不应该会影响性能。
int
,6000000
与6*1000*1000
不同。 - chux - Reinstate Monica
sleep(6)
,这样也能表达“6秒”的意思,而且没有任何阅读障碍。 - Jonathan Leffler(int)(6.0*10e6)
。 - Lundin(int)(6.1*10e6)
建议在两个方面存在致命缺陷,一是使用了6.1而需要6,二是sleep时间是目标时间的10倍。这些都表明它与更好、更安全相去甚远。—— Lundin在时间限制到期之前成功纠正了他的评论(但不是数量级为错:使用6.0*1E6
或6.0*1.0E6
将是可行的)。 - Jonathan Leffler