Erreur Invalide l'utilisation de void expression
J'ai une fonction int rt_task_start (RT_TASK *task, void(*task_func)(void *arg), void *arg)
où en deuxième argument, je suis de passage d'une fonction avec l'argument.
- Lorsque je passe un nom de fonction à l'époque, il n'y a pas de problème.(comme prévu ça fonctionne).
rt_task_start(&demo_task1, demo, 1);
- Mais quand je passe la
rt_task_start(&demo_task1, demo(&val), 1);
il me fait erreurerror: invalid use of void expression
. Val Variable est définie avant.int val = 0;
- Quand je l'appelle avec ce
rt_task_start(&demo_task1, demo(val), 1);
cela montre l'erreurWarning passing argument 1 of 'demo' makes pointer from integer without a cast
puiserror: invalid use of void expression
. int *val;
*val = 0;
rt_task_start(&demo_task1, demo(&val), 1);
c'est aussi de me donner l'erreur.
Je ne peux pas comprendre ce que je devrais passer, comme un vide pointeur. Il me fait erreur. Aucune Idée S'Il Vous Plaît!
Qu'est-ce que votre intention avec cette fonction? Voulez-vous le second argument un pointeur de fonction, ou un type de données différent? Il ne peut pas être les deux en même temps. Aussi,
merci de m'indiquer, je veux deuxième fonction seulement un pointeur de fonction. En fait, j'étais confus au sujet de la deuxième argument
int *val; *val = 0;
va probablement créer une erreur de segmentation puisque vous êtes l'affectation d'une valeur à un indéfini emplacement de l'adresse.merci de m'indiquer, je veux deuxième fonction seulement un pointeur de fonction. En fait, j'étais confus au sujet de la deuxième argument
void(*task_func)(void *arg)
ce type de paramètres qu'il peut prendre. Je l'ai bien que je peux envoyer l'argument trop, pour le cas 2, 3 et 4 qui sont incorrectes.OriginalL'auteur Arun Gupta | 2014-03-29
Vous devez vous connecter pour publier un commentaire.
La déclaration ci-dessus définit
task_func
être un pointeur sur une fonction qui prend un pointeur de typevoid *
et ne retourne aucune valeur.Par conséquent, lorsque vous appelez votre fonction
rt_task_start
, vous devriez passer un pointeur à une fonction comme deuxième argument. Aussi, vous devriez passer un pointeur de typevoid *
en tant que troisième argument, pas un entier. Un nom de fonction renvoie un pointeur vers la fonction, de sorte que vous pouvez tout simplement passer le nom de la fonction que la valeur de l'argument, ou vous pouvez utiliser l'adresse de l'opérateur&
avant le nom de la fonction.OriginalL'auteur ajay
Je ne suis pas sûr de savoir comment le code dans (1) peut éventuellement compiler. Mais voici ce que vous devriez être en utilisant:
Vous ne pouvez pas passer le pointeur de fonction lié à un argument, qui est quelque chose comme une fermeture, ce qui n'est pas disponible en C. Vous pouvez, cependant, passer le pointeur de fonction et ensuite séparément passer l'argument que vous souhaitez appliquer (ce qui est la signature de la fonction suggère que vous devez faire). Mais vous devez passer cet argument comme un pointeur, pas un littéral.
OriginalL'auteur Jeremy West
Vous voulez sûrement:
Juste en faisant correspondre les types d'argument, n'oubliez pas le deuxième argument est juste un pointeur de fonction, pas un appel de fonction avec son propre argument, c'est propre argument est utilisé uniquement lorsque vous l'appelez dans rt_task_demo. Ensuite, si vous souhaitez utiliser la valeur '1' dans la fonction 'rt_task_demo" vous refonte comme
OriginalL'auteur user3353819