STRAIGHTFORWARDコードは私にgccの警告"cast to pointer from integer of different size [-Wint-to-pointer-cast]"
を与えます。 それはSTRAIGTHFORWARDのキャストが違法であることを意味しますか?ポインタから異なるサイズの整数へのキャスト
#include <pthread.h>
#include <signal.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
void *thr(void *Arg)
{
#if STRAIGHTFORWARD
printf("i=%d\n", (int)Arg);
#else
printf("i=%d\n", (int)(intptr_t)Arg);
#endif
return 0;
}
int main()
{
pthread_t tids[4];
for(int i=0; i < sizeof tids/sizeof tids[0]; i++){
#if STRAIGHTFORWARD
pthread_create(tids+i, 0, thr, (void*)i);
#else
pthread_create(tids+i, 0, thr, (void*)(intptr_t)i);
#endif
}
pthread_exit(0);
}
intptr_tはそこにあります。なぜなら、警告を消すためです:Dありがとうございます。 – PSkocik
明示的にそのOPsを追加することを提案する '(int)(intptr_t)Arg)'はコンパイラの警告を止めるだけですが、 'int'が' void * 'よりも実際に小さい場合にも同様の問題が発生します。 –
。 – PSkocik