【问题标题】:time.h works in C++ not in Ctime.h 适用于 C++ 而不是 C
【发布时间】:2011-12-15 01:32:44
【问题描述】:

代码:

#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 的简单程序。问题是创建随机数和 时间吧。当我编译为默认或 C++ 和 Visual Studio,但我决定用 C 来做 我想创建一个动态数组。

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

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

不管怎样,碰巧我决定用 C 编写,所以看起来合乎逻辑 用 C 编译。我选择了time 函数来测量程序, 我比clock 更喜欢它,因为我不知道有多少个处理器 正在工作。

问题:

上面带有 cmets 的代码在 C++ 中可以完美编译,但在 C 中它不能编译。 具体来说,这一行:

time (&start);

给我这个错误:

syntax error : missing ';' before 'type'

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

【问题讨论】:

  • 使用#include &lt;xxx.h&gt; 而不是#include "xxx.h"
  • stdafx.h 是不必要的;它是 Microsoft 特定的,您没有使用它。可以从C++调用malloc(),但是转换规则不同;它返回一个void* 结果,它可以隐式转换为C 中的目标类型,但不能在C++ 中。但是无论如何你都应该在 C++ 中使用new 和delete——或者更好的是,一些容器类。是的,当然如果你正在编写 C 代码,你应该使用 C 编译器,如果你正在编写 C++ 代码,你应该使用 C++ 编译器。它们是不同(但密切相关)的语言。

标签: c++ c time malloc


【解决方案1】:

我敢打赌,您的 C 编译器默认的规则是变量声明必须位于块的开头。

在int i 之前,您先致电time(&amp;start)。这在 C++ 中是可以的,但在 C 中则不行。具体而言,在 C99 之前的所有 C 版本中,所有变量都必须在任何程序代码之前声明。在 1999 年的 C 标准中,规则更改为类似于 C++,您可以混合使用代码和变量声明。

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

【讨论】:

  • 澄清一下:在 C89 中,变量必须在块的开头声明,而在新的 C 标准 (C99) 中,这个限制被删除了。
  • 我觉得很奇怪,一个 12 年前的标准被认为是新的,但尚未完全采用。而在 C++ 中,我渴望在 C++0x正式成为标准之前迁移到它。
  • 非常感谢,我可能花了很多时间才注意到,因为我最了解的语言是 php,而且语法限制较少。虽然我还是不懂C,但我能感受到它的力量和那种东西的语法……最终会让你写出更好的代码。
  • @BenjaminLindley:这一切都取决于。有时您会发现自己试图将代码移植到嵌入式系统,该系统的最后一个受支持的编译器是在 2003 年发布的,该编译器是在 2000 年发布的基础上构建的。
  • @BenjaminLindley:我很想转向 C++0x,但我仍然有人希望我们为 Fedora 4 和 Redhat Enterprise 2AS 构建库。
猜你喜欢
  • 1970-01-01
  • 2011-08-22
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-08
  • 2012-03-09
相关资源
最近更新 更多