VS2010:函数时间()不符合预期

VS2010: Function time() not as expected

考虑以下小程序:

#include <time.h>

int main(void) {
    time_t now;
    now = time(NULL); // This term gives an error in VS2010

    return 0;
}

在 Ubuntu 和 gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 上编译没有错误。

但是,当我在 VS2010 项目中使用上面的代码片段时,项目没有生成。错误是:

error C2064: term does not evaluate to a function taking 1 arguments

我也试过用time()time(&time_t)。两者都以 error C2064 失败。根据MS documentation以上用法应该是正确的。

time() 函数在 VS2010 中实际接收多少个参数?

这可行,但您应该弄清楚冲突是什么...这是一个技巧。

(::time)(NULL)

编辑:来自 op 的新信息。这是原始代码:

time_t time = 0;
time_t now;
now = time(NULL);

变量名冲突的解决方法是这样的:

time_t myTime = 0;
time_t now;
now = time(NULL);

我发现了真正的错误。这最初不是我的项目,但我最近开始着手添加一些功能。

事实证明这个错误是微不足道的。再次彻底查看源代码后,我注意到已经声明了一个变量 time_t time; 。当我尝试分配 now = time(NULL); 时,上述变量干扰了函数调用。

来自 VS2010 的错误消息 term does not evaluate to a function taking 1 arguments 在这种情况下非常令人分心。如果省略参数,它将变为 term does not evaluate to a function taking 0 arguments。从这些消息中,我假设调用了另一个包含文件中名为 time() 的函数,或者 VS2010 具有 time().

的 non-standard 实现

调用函数 - 正如 user3853544 在评论中所建议的那样 - 使用 now = (::time)(NULL); 向编译器发出信号,表明我指的是函数而不是先前声明的变量。另一种解决方案是重命名有问题的变量,使其不会与函数名称冲突。

PS:我重新创建了问题并尝试在 Ubuntu 上编译它。来自 gcc 的错误消息更加翔实和准确:

$ cat sample.c
#include <time.h>

int main(void) {
    time_t time = 0;
    time_t now;
    now = time(NULL);

    return 0;
}
$
$ gcc sample.c 
sample.c: In function ‘main’:
sample.c:6:8: error: called object ‘time’ is not a function or function pointer
  now = time(NULL);
        ^
sample.c:4:9: note: declared here
  time_t time = 0;
         ^