2017-05-10 4 views
-3

Comment stocker des valeurs de la fonction vide dans main?comment stocker les valeurs de retour de void dans C?

Exemple

void UsartCallback (uchar* buf, uint len) 
{ 
    return void(*buf); 
} 

int main() 
{ 
    UsartCallback(&buf,1); // I can get values from void function but how to store this "*buf" value 
    // For Example 
    uchar* data=UsartCallback(&buf); //Error: but i want get only "buf" value from void function. 
} 
+3

* void *, par définition, ne * pas * valeur de retour. Vous devriez juste l'appeler sans affectation: 'UsartCallback (& ​​buf)'. La partie 'uchar * data' est inutile – Ian

+0

non je peux retourner la valeur que j'ai montrée ci-dessus. – user3764118

+1

Quel processus de réflexion a conduit à la décision d'étiqueter une question C [tag: C++] et [tag: C#], priez tell? –

Répondre

0

Ceci est invalide Code, car elle viole la contrainte.

C11 Citant, chapitre §6.8.6.4

Une déclaration return avec une expression ne doit pas apparaître dans une fonction dont le type de retour est void. [...]

+0

puis-je le faire en C++? – user3764118

+0

@ user3764118 pourquoi? –

+0

@ user3764118 Mec écrivez-vous C ou est-ce C++? Voulez-vous s'il vous plaît _pick one_? –

0

Vous ne pouvez pas. Il n'y a pas de "valeur nulle". void est l'absence d'une valeur. Il est vrai qu'il ressemble à vous renvoyez une "chose" ici, mais vous n'êtes pas.

  • En C, ceci est illégal et votre programme ne compile même pas. En C++, le code est accepté comme une "bizarrerie" de la syntaxe (ceci pour faciliter la mise en œuvre des templates). Votre ligne est effectivement la même que return;.


ok est-il possible d'obtenir « buf » valeur de vide et je veux stocker que, dans « principale » .. est-il possible?

D'accord, question complètement différente maintenant.

buf est un pointeur. Donc, oui, il suffit de le retourner. Vraisemblablement votre rappel est nécessaire pour renvoyer void* par une force externe?

void* UsartCallback (uchar* buf, uint len) 
{ 
    return buf; 
} 

Je vous suggère de rafraîchir la syntaxe du pointeur; votre question (si je la comprends maintenant correctement, vraiment difficile à dire) trahit un manque de compréhension de la façon de travailler avec les types de pointeurs.

+0

ok est-il possible d'obtenir la valeur "buf" de void et je veux stocker cela dans "main" .. est-ce possible? – user3764118

2

Vous voulez sans doute ceci:

void *UsartCallback (uchar* buf, uint len) 
{ 
    return (void*)buf; 
} 

int main() 
{ 
    uchar *mybuf = UsartCallback(&buf,1); 
} 
+0

Oh, c'est vrai. Hé. –

+0

ah, c'est un pointeur * void * – Ian

+0

Peut-être, peut-être pas, nous avons passé le pointeur 'buf' comme argument ...... :) –