Bonsoir,

Voilà un code qui illustre mon problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
 
#include <pthread.h>
 
struct s
{
  pthread_t id;
  void* (*pf) (void*);
};
 
static void* f (void* p);
 
int main (void)
{
  struct s s1 = {0, f};
 
  s1.pf(NULL);
 
  return 0;
}
 
static void* f (void* p)
{
  (void)p;
 
  puts("test");
 
  return NULL;
}
GCC me dit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
forums.c: In function `main':
forums.c:15: warning: missing braces around initializer
forums.c:15: warning: (near initialization for `s1.id')
forums.c:15: warning: initialization makes integer from pointer without a cast
forums.c:15: warning: missing initializer
forums.c:15: warning: (near initialization for `s1.pf')
Visual C 2005 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
forums.c(15) : warning C4047: 'initialisation'*: 'unsigned int' diffère de 'void
 *(__cdecl *)(void *)' dans les niveaux d'indirection
Et à l'exécution, ça plante. Si dans la structure s1 je remplace le champ pthread_t par un int, aucun problème (à la compilation et à l'exécution).
Les headers et la bibliothèque pthreads viennent du fichier "pthreads-w32-2-8-0-release.exe" téléchargé sur ce site : http://sourceware.org/pthreads-win32/.
Est-ce qu'il y a une erreur dans mon code ? J'avoue pour le moment ça m'échappe complètement. Je testerai sur une autre plateforme demain mais ça m'arrangerait de pouvoir utiliser les pthreads sous Windows aussi.

Merci.