функция pthread_create без аргументов - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь понять, как работает pthread_create и pthread_join. Я думал, что третий аргумент pthread_create допускает только функции с одним аргументом void *. Я скомпилировал приведенный ниже код с помощью gcc, и он работал просто отлично. Но почему?

void *foo() {
    return 0;
}

int main() {
    pthread_t thread_id;
    int par = 5;
    pthread_create(&thread_id, NULL, foo, &par);
    pthread_join(thread_id, NULL);
    return 0;
}

1 Ответ

0 голосов
/ 31 октября 2018

void foo()

означает, что функция foo может принимать любое количество аргументов неизвестного типа, тогда как

void foo(void *)

означает, что функция foo принимает аргумент типа void * Вот почему программа компилируется, так как ваша функция может принимать аргументы любого типа, включая void *

Аргумент void * - это пустой указатель, с которым не связан тип данных. Он может содержать адрес любого типа и может быть преобразован в любой тип.

Чтобы найти разницу между foo() и foo(void *) см. здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...