time.h适用于C ++,而不适用于C语言

代码:

#include "stdafx.h" #include "stdio.h" #include "math.h" #include "stdlib.h" #include "time.h" int main() { time_t start, end; time (&start); int i; double dif; /*int serie[100000];*/ /* int *serie = malloc( sizeof(int) ); for (i = 0; i <= 100000; i++) { *serie(i)=rand(); printf("%d \n", serie[i]); } */ time (&end); dif = difftime (end, start); printf ("Time of execution is: %f\n", dif ); getchar(); return 0; } 

简介:(无需阅读)

我从大约3年前就认识了一点C ++。 我决定学习C来创建一个“快速”子集和算法。 这是一个学习C的简单程序。问题是创建随机数和时间。 当我使用Visual Studio编译为默认或C ++时,此代码实际上有效,但我决定在C中执行此操作,并且我想创建一个动态数组。

似乎C中没有new 。我们必须使用malloc ,但是要编译malloc我认为它必须在C中编译。在C ++中,它给了我这个错误:

 cannot convert from 'void *' to 'int *' 

无论如何,碰巧我决定用C语言编写,所以用C语言编译似乎是合乎逻辑的。我选择了time函数来测量程序,我喜欢它比clock更多,因为我不知道有多少处理器工作。

问题是:

上面的代码与注释在C ++中完美编译,但在C中它不编译。 具体来说,这一行:

 time (&start); 

给我这个错误:

 syntax error : missing ';' before 'type' 

我只是想计算开始时间和结束时间,然后用我在C ++中成功完成的difftime减去它们。

我敢打赌,你的C编译器默认为变量声明必须在块的开头。

你可以在int i之前调用time(&start) 。 这在C ++中是可以的,但在C中则不行。具体来说,所有变量必须在所有C版本的程序代码之前声明,直到C99。 在1999 C标准中,规则变为C ++,您可以混合使用代码和变量声明。

如果你有一个允许C99规则的C99编译器或编译器选项,仍然不这样做,因为它不可靠地可移植。 即使在C99中,无论如何都没有很多理由混合变量和代码。 我能想到的唯一一个是C99可变长度数组,它需要代码来计算所需的长度。