这两种方法在我的简单测试代码中都是正确的,但是我想知道在编码样式方面是否有任何真正的区别,或者是否有任何一致的首选项。
随函附上示例代码:
#include <stdio.h>
#include <time.h>
int main(int argc, char **argv)
{
time_t now1, now2;
time(&now1);
now2 = time(NULL);
printf("now1 = %ld\n", now1);
printf("now2 = %ld\n", now2);
return 0;
}编辑
我刚刚看到了基思·汤普森的回答 --这个问题应该被标记为重复。
发布于 2017-03-14 13:09:46
两者之间没有区别。
如果你这样做:
time_t now1, now2;
now2 = time(&now1);now1和now2都具有相同的值。
作为历史记录,如果在Linux2.4或更早版本的64位内核上运行,这些与是不一样的。time函数中有一个错误,其中只设置了传入参数的下32位(当time_t为64位时)。因此,如果您使用返回值,您将得到正确的值,但是如果您传入一个time_t的地址,如果没有初始化变量,您就会得到垃圾。
发布于 2017-03-14 13:31:02
另外,考虑到性能:如果使用带有NULL参数值的代码,编译器将生成与参数(生成的代码将包含对实际地址的输入参数的赋值)不同的代码(最可能的情况下,编译器将输出输入参数(通常是寄存器)),而且由于无论参数值如何,函数都将返回时间的值,如果存在(有效的)地址,因为执行参数可能需要几个周期,因为在函数内部,需要检查是否将返回值复制到给定的地址,如果存在地址(即:参数为null),则将执行内存副本。
发布于 2017-03-14 14:03:12
如果真的有什么区别呢?
没有很大的差别。
time_t now1, now2;
time(&now1);
now2 = time(NULL);未显示的是time_t now3 = time(NULL);,它遵循了流行的雷伊风格,因为在OP的2个示例中,对象从来不存在没有定义的值--这是一个简短的例子。
还是在编码风格上有任何一致的偏好?
我更喜欢这第三种方式,但最好使用您的小组的编码标准概述的风格。如果您的组缺乏标准,请使它们更有价值,因为以类似的一致风格编写代码更有价值。
https://stackoverflow.com/questions/42786879
复制相似问题