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;
^
考虑以下小程序:
#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()
.
调用函数 - 正如 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;
^