我想用pthread_once来初始化一些代码。但调用由
的init_routine() {1}导致编译时警告 - 警告:传递来自兼容的指针类型“调用pthread_once”的参数2,而使用
{2}不给出任何提示传递函数作为参数pthread_once
file1中.C
int init_routine (void) {
// initialize variables
}
在file1.h
int init_routine(void);
现在我包括file2.c中的file1.h
在file2.c中
#include "file1.h"
pthread_once_t prog_inited = PTHREAD_ONCE_INIT;
int start() {
...
pthread_once(&prog_inited, &init_routine); <-- {1}
pthread_once(&prog_inited, (void *)init_routine); <-- {2}
...
return 0;
}
的是这之间的区别?
谢谢。
你的'init_routine'声明是什么?如果是'extern void init_routine()',你可能需要将它改为'extern void init_routine(void)' –
@JosephQuinsey刚刚编辑了这个问题。 'init_routine()'有一个返回类型'int',并且包含在file1.h中的file2.c中。 – adizone
因此,将返回类型从'int'更改为'void'可能会解决您的问题 –