définition de type d'un pointeur de fonction type
Je veux déclarer un pointeur de type point à une fonction, j'ai donc essayer:
typedef void (*print)(void);
fonctionne parfaitement
void (*print)(void);
p est un ponter variable , pas un type.
typedef (void) (*print)(void);
erreur escomptés identificateur ou ‘(’ avant ‘void’
typedef void (*)(void) Print;
d'erreur: ‘=’, ‘,’, ‘;’, ‘asm " ou "_ attribut _ "avant " Imprimer".
Ma question est:
- Dois-je utiliser
typedef
de déclarer un pointeur de fonction type ? - Pourquoi
typedef (void) (*print)(void);
est le problème ? ce()
signifie ici? - Pourquoi je ne peux pas écrire de cette façon:
typedef void (*)(void) Print
?
Vous n'avez pas besoin typedef pour déclarer un pointeur de fonction typer.
Comment faire ? post l'idée ,s'il vous plaît.
Toutes vos questions peuvent très bien être répondu avec "parce que la langue de créateurs ont décidé de cette façon"
Dans une réponse à une autre question, j'ai essayé d'expliquer comment déclarer un pointeur de fonction. Voir stackoverflow.com/a/6905987/396551
Merci .
Comment faire ? post l'idée ,s'il vous plaît.
Toutes vos questions peuvent très bien être répondu avec "parce que la langue de créateurs ont décidé de cette façon"
Dans une réponse à une autre question, j'ai essayé d'expliquer comment déclarer un pointeur de fonction. Voir stackoverflow.com/a/6905987/396551
Merci .
OriginalL'auteur Lidong Guo | 2013-09-05
Vous devez vous connecter pour publier un commentaire.
La manière correcte est:
et son utilisation pour la variable/déclaration des paramètres est:
Vous n'avez pas besoin d'une définition de type pour déclarer une variable. Vous pouvez écrire directement
void (*p)(void)
pour déclarer une variablep
pointant vers une fonction prenantvoid
et le retourvoid
. Toutefois, pour déclarer un alias de type /nom pour un pointeur de fonction,typedef
est l'outil.Ne signifie rien, il n'est pas valide la syntaxe du C.
Parce que c'est pas comment C fonctionne. Typedefs en C imite la manière dont les variables sont déclarées ou définies.
qu'entendez-vous par "déclarer un pointeur de fonction de type"? Vous pouvez déclarer un objet de type "pointeur de fonction", sans l'aide d'un
typedef
. Il n'existe aucun moyen autre que l'aidetypedef
pour créer un nom de type que vous pouvez utiliser par la suite.J'espère pour déclarer un type comme un struct nom, alors je peux l'utiliser déclarer beaucoup de pointeur de fonction'
alors cette réponse vous montre comment le faire. Après la définition de type, vous pouvez simplement le faire pour avoir 5 pointeurs de fonction avec la même signature:
print_function_ptr p1, p2, p3, p4, p5;
OriginalL'auteur Juraj Blaho
Non, vous n'avez pas à utiliser un
typedef
pour créer un objet de type "pointeur de fonction":Cependant, il n'y a aucun moyen de créer un nom pour un autre type que par l'aide d'un
typedef
. Je suppose que vous pourriez vous adonner à de macro hackery pour générer un "pointeur de fonction", mais après la macro est élargi, vous auriez un "pointeur de fonction' écrit:La
(void)
notation comme le nom du type est mauvais. Vous ne"t écrire:(int) x;
et s'attendre à déclarer une variablex
-- c'est un type de fonte. Même avec la notation que vous utilisez dans votretypedef
.Vous ne pouvez pas écrire
typedef void (*)(void) Print;
car il n'est pas un permis C, de la syntaxe. Vous aussi vous ne pouvez pas écriretypedef [32] int name;
soit elle n'est pas valide la syntaxe du C.OriginalL'auteur Jonathan Leffler