アプリケーション開発ポータルサイト
ServerNote.NET
ServerNote.NET厳選キャンペーン・クーポンはこちら!
カテゴリー【C/C++
pthread_createでinvalid conversion from void* to void* (*)(void*)と言われる場合
POSTED BY
2021-09-30

C言語ベースのpthread_createを呼ぶソースをg++コンパイラにかけると表題のエラーが出ることがある。

問題のコード

#include <stdio.h>
#include <pthread.h>

void thread_func(void *p) {
 printf("test\n");
}

int main(void) {

 pthread_t t1;

 pthread_create(&t1, NULL,  (void*)thread_func, NULL);

 pthread_join(t1, NULL);

 return 0;
}

gccでは、これで問題ないが、g++とすると、エラー。これを回避するには、スレッド関数指定を以下のように変更する。

#include <stdio.h>
#include <pthread.h>

void thread_func(void *p) {
 printf("test\n");
}

int main(void) {

 pthread_t t1;

 pthread_create(&t1, NULL,  (void *(*)(void *))&thread_func, NULL);

 pthread_join(t1, NULL);

 return 0;
}

非常にわかりにくいがこれで正常にg++でもコンパイルされ、実行できる。

お掃除機能を追求したダスキンの【ロボットクリーナー SiRo】
ロボットクリーナーレンタル開始。2週間お試し出来ます。2週間使用してみて良ければ契約お願いします。 しか...READ MORE
全ての悩みを全国各地の有名占い師達が解決!【電話占いヴェルニ】
老舗の電話占いサイト「電話占いヴェルニ」のプログラムです。 《電話占いとは?》 電話占いとは、雑誌やT...READ MORE
定額制でプリントし放題の複合機レンタルサービス【プリント革命】
▼プリント革命について▼ オフィスには大型複合機が必要。カラー印刷はコストがかかる。 この2つの常識を...READ MORE
※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【webmaster/管理人】
自営業プログラマー
ご連絡は以下アドレスまで★

☆ServerNote.NETショッピング↓
ShoppingNote
☆お仲間ブログ↓
一人社長の不動産業務日誌
【キーワード検索】