首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >time_t now=time(NULL);time_t now;time(&now);?

time_t now=time(NULL);time_t now;time(&now);?
EN

Stack Overflow用户
提问于 2017-03-14 13:07:24
回答 4查看 1.4K关注 0票数 4

这两种方法在我的简单测试代码中都是正确的,但是我想知道在编码样式方面是否有任何真正的区别,或者是否有任何一致的首选项。

随函附上示例代码:

代码语言:javascript
运行
复制
#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;
}

编辑

我刚刚看到了基思·汤普森的回答 --这个问题应该被标记为重复。

EN

回答 4

Stack Overflow用户

发布于 2017-03-14 13:09:46

两者之间没有区别。

如果你这样做:

代码语言:javascript
运行
复制
time_t now1, now2;
now2 = time(&now1);

now1now2都具有相同的值。

作为历史记录,如果在Linux2.4或更早版本的64位内核上运行,这些是不一样的。time函数中有一个错误,其中只设置了传入参数的下32位(当time_t为64位时)。因此,如果您使用返回值,您将得到正确的值,但是如果您传入一个time_t的地址,如果没有初始化变量,您就会得到垃圾。

票数 1
EN

Stack Overflow用户

发布于 2017-03-14 13:31:02

另外,考虑到性能:如果使用带有NULL参数值的代码,编译器将生成与参数(生成的代码将包含对实际地址的输入参数的赋值)不同的代码(最可能的情况下,编译器将输出输入参数(通常是寄存器)),而且由于无论参数值如何,函数都将返回时间的值,如果存在(有效的)地址,因为执行参数可能需要几个周期,因为在函数内部,需要检查是否将返回值复制到给定的地址,如果存在地址(即:参数为null),则将执行内存副本。

票数 1
EN

Stack Overflow用户

发布于 2017-03-14 14:03:12

如果真的有什么区别呢?

没有很大的差别。

代码语言:javascript
运行
复制
time_t now1, now2;
time(&now1);
now2 = time(NULL);

未显示的是time_t now3 = time(NULL);,它遵循了流行的雷伊风格,因为在OP的2个示例中,对象从来不存在没有定义的值--这是一个简短的例子。

还是在编码风格上有任何一致的偏好?

我更喜欢这第三种方式,但最好使用您的小组的编码标准概述的风格。如果您的组缺乏标准,请使它们更有价值,因为以类似的一致风格编写代码更有价值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42786879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档