Bonsoir,
Voilà un code qui illustre mon problème :
GCC me dit :
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; }
Visual C 2005 :
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')
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).
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
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.
Partager