Я пытаюсь использовать pthread_once для инициализации некоторого кода. Но называть init_routine() по
{1} вызывает во время компиляции предупреждение - предупреждение: проходя аргумент 2 из «pthread_once» от несовместимого типа указателя, в то время как с помощью
{2} не дает каких-либо предупрежденийПередача функции как аргумент pthread_once
В file1 .c
int init_routine (void) {
// initialize variables
}
В file1.h
int init_routine(void);
Теперь я включаю file1.h в file2.c
В 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' и включен в файл file2.c из файла file1.h. – adizone
Так что изменение типа возврата с 'int' на' void' может решить вашу проблему –