несовместимые типы указателей, передающие 'void (void *) параметру типа' void * - PullRequest
0 голосов
/ 24 сентября 2019

Я создал pthread следующим образом:

void function1(void *s) {
start = (*(int *)s ;
}

pthread_t threads[numthreads];
int ids[numthreads];
for (i = 0; i < numthreads; i++) {
    ids[i] = i;
    int * p = &ids[i] ;
    pthread_create(&threads[i], NULL, function1, (void *)p);
}

Но это дает мне ошибку:

>> mpicc -o hprogram hprogram.c
warning: incompatible pointer types passing 'void (void *)' to
      parameter of type 'void * _Nullable (* _Nonnull)(void * _Nullable)'
      [-Wincompatible-pointer-types]
                        pthread_create(&threads[i], NULL, function1, (void *)...
                                                          ^~~~~~~~~~
/usr/include/pthread.h:328:31: note: passing argument to parameter here
                void * _Nullable (* _Nonnull)(void * _Nullable),
                                            ^
1 warning generated.


Это программа MPI, и я создаю гибридный MPI с использованием pthreads.

1 Ответ

3 голосов
/ 24 сентября 2019

pthread_create() ожидает указатель на функцию, которая принимает void* в качестве ввода и возвращает void* в качестве вывода, но ваша функция вместо этого возвращает void.Вам просто нужно добавить * к типу возвращаемого значения и добавить оператор return, например:

void* function1(void *s) {
    start = *(int *)s;
    return NULL; // <-- or whatever you want
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...