我知道我收到initializer element is not constant错误,因为我尝试将对clock()的调用分配给startTime中的Timer,而startTime是静态的(这意味着它的值只能是在编译时已知的值)。

这是我的代码,我需要每隔(*func)秒调用一次seconds,并且不确定如何实现此功能,那么什么是做我所需的好方法?

static void Timer(void (*func)(void), int seconds)
{
        static clock_t startTime = clock();

        if ((startTime - clock() / CLOCKS_PER_SEC) > seconds)
        {
            startTime = clock();
            (*func)();
        }
}

更新资料

发表评论的人建议我这样做,但如果这样做,开头的if是多余的:
    static clock_t startTime = (clock_t) -1;

    if (startTime == -1) startTime = clock();
    else if ((startTime - clock() / CLOCKS_PER_SEC) > seconds)
    {
        startTime = clock();
        (*func)();
    }

最佳答案

static void Timer(void (*func)(void), int seconds)
{
    static clock_t startTime = 0;

    if(!startTime)
        startTime = clock();

    if ((startTime - clock() / CLOCKS_PER_SEC) > seconds)
    {
        startTime = clock();
        (*func)();
    }
}

关于c - 错误: initializer element is not constant (how can I implement this?),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43968611/

10-12 16:07