【问题标题】:why is this warning ( no return , in function returning non-void)?为什么这个警告(没有返回,在函数返回非无效)?
【发布时间】:2014-07-14 10:42:52
【问题描述】:
void *rastertask()
{
    struct sched_param sparm;
    memset(&sparm, 0, sizeof(sparm));
    sparm.sched_priority = 10; /* 0 = lowest, 99 = highest */

    sched_setscheduler(
            0 /* pid, 0 ==> this process */,
            SCHED_RR /* policy */,
            &sparm);

    unsigned int n_loop;
    for(n_loop=0;;n_loop++) {
        struct timespec ts_start, ts_end;
        clock_gettime(CLOCK_REALTIME, &ts_start);

        TASK1(Task2ms_Raster); /* gets called every 2ms */
        if( (n_loop % 5) == 0) {
            TASK2(Task10ms_Raster); /* get called every 5 * 2ms = 10ms */
        }
        if( (n_loop % 50) == 0) {
            TASK3(Task100ms_Raster); /* get called every 50 * 2ms = 100ms */
        }

        if( (n_loop % 250) == 0 ) {
            /* reset loop counter when smallest common
             * multiple of timing grid has been reached */
            n_loop = 0;
        }

        clock_gettime(CLOCK_REALTIME, &ts_end);
        useconds_t const tasks_execution_time = delta_t_us(&ts_start, &ts_end);

        if( tasks_execution_time >= MS_to_US(2) ) {
            /* report an error that tasks took longer than 2ms to execute */
        }

        /* wait for 2ms - task_execution_time so that tasks get called in
         * a close 2ms timing grid */

        else
            usleep( MS_to_US(2) - tasks_execution_time );
    }

}


int main(int argc, char *argv[])
{

               pthread_t thread_id

                if (pthread_create(&thread_id, NULL, &rastertask, NULL)) {
                               perror ("pthread_create");
                               exit (1);
                }

return 0;
}

我正在主函数中创建一个线程。在函数中创建了一个调度程序,用于每 2 毫秒、10 毫秒和 100 毫秒调用一次任务。 我在 void *rastertask() 中收到警告,因为 NO 返回,在函数返回非 void。

【问题讨论】:

    标签: c linux timer scheduled-tasks scheduler


    【解决方案1】:

    你承诺返回一个 void 指针,但你没有。因此发出警告。

    void*void 作为返回类型不同。

    您可能想将函数定义为

    void rastertask()
    

    编辑:

    好的,所以您需要将函数定义为void *,以便与pthread_create() 一起使用。在这种情况下,您需要添加一个 return 语句,即使它会返回空指针。

    【讨论】:

    • 我把它改成了 void rastertask ??但再次警告:从不兼容的指针类型传递 pthread_create 的参数 3。
    • 如果我添加 return 0 那么没有警告!这是为 void 函数添加 return 0 的正确方法吗??
    • 只要您确定没有人会尝试取消引用返回的值 - 是的,这很好。
    • 我只是每隔 2 毫秒、10 毫秒和 100 毫秒调用该函数中的任务!所以我认为,这不会是一个问题。
    猜你喜欢
    • 2013-03-25
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    相关资源
    最近更新 更多