Typedef uint32_t (*CountFunction)(char *v, uint32_t size);
Fermé
salah dell
Messages postés
20
Date d'inscription
lundi 15 octobre 2012
Statut
Membre
Dernière intervention
22 mai 2013
-
Modifié par Jeff le 17/10/2014 à 18:44
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 - 4 déc. 2012 à 15:25
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 - 4 déc. 2012 à 15:25
A voir également:
- Typedef uint32_t (*CountFunction)(char *v, uint32_t size);
- Coco char - Accueil - Réseaux sociaux
- Folder size - Télécharger - Gestion de fichiers
- Tree size free - Télécharger - Gestion de fichiers
- Hyper v download - Télécharger - Divers Utilitaires
- Net framework 4.0 v 30319 windows 7 - Télécharger - Divers Utilitaires
2 réponses
Hxyp
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
54
3 déc. 2012 à 16:05
3 déc. 2012 à 16:05
Bonjour,
C'est la création d'un type en utilisant la nomination d'un pointeur de fonction. Donc les variables qui seront créées à l'aide du type CountFunction devront être des adresses de fonction ayant le même prototype, c'est à dire :
retournant un uint32_t et ayant pour paramètres char * et un uint32_t.
Exemple :
C'est la création d'un type en utilisant la nomination d'un pointeur de fonction. Donc les variables qui seront créées à l'aide du type CountFunction devront être des adresses de fonction ayant le même prototype, c'est à dire :
retournant un uint32_t et ayant pour paramètres char * et un uint32_t.
Exemple :
#include <stdint.h> #include <stdio.h> typedef uint32_t (*CountFunction)(char *v,uint32_t size); uint32_t mafonction(char *v,uint32_t size){ printf("%s %d\n",v,size); return 1337; } int main(void){ CountFunction ctf; ctf=mafonction; printf("%d\n",ctf("hello",100)); return 0; }
salah dell
Messages postés
20
Date d'inscription
lundi 15 octobre 2012
Statut
Membre
Dernière intervention
22 mai 2013
3 déc. 2012 à 16:11
3 déc. 2012 à 16:11
et est ce que CountFunction est un type ???
psq ds mon programme C que je dois traduire en assembleur y a ca :
CountFunction function;
CountFunction functions[] = {
default_count_function,
my_count_function,
NULL
};
ce que j'ai compris moi est que CountFunction est un type psq le tableau functions[] est de type CountFunction
voila aidez moi svp je suis bien paumé ds ce C et ASSEMBLEUR ;)
psq ds mon programme C que je dois traduire en assembleur y a ca :
CountFunction function;
CountFunction functions[] = {
default_count_function,
my_count_function,
NULL
};
ce que j'ai compris moi est que CountFunction est un type psq le tableau functions[] est de type CountFunction
voila aidez moi svp je suis bien paumé ds ce C et ASSEMBLEUR ;)
Hxyp
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
54
3 déc. 2012 à 16:22
3 déc. 2012 à 16:22
Oui CountFunction est un type car il y a utilisation du typedef et vôtre exemple et le mien le prouve par la création de variable en utilisant ce type!
C'est exact encore, je rajoute une modif pour le tableau :
C'est exact encore, je rajoute une modif pour le tableau :
#include <stdint.h> #include <stdio.h> typedef uint32_t (*CountFunction)(char *v,uint32_t size); uint32_t mafonction1(char *v,uint32_t size){ printf("fonction1 %s %d\n",v,size); return 1; } uint32_t mafonction2(char *v,uint32_t size){ printf("fonction2 %s %d\n",v,size); return 2; } int main(void){ CountFunction tab[]={mafonction1,mafonction2}; printf("%d %d\n",tab[0]("hello",111),tab[1]("world",222)); return 0; }
salah dell
Messages postés
20
Date d'inscription
lundi 15 octobre 2012
Statut
Membre
Dernière intervention
22 mai 2013
3 déc. 2012 à 16:37
3 déc. 2012 à 16:37
merci bien c un peux claire mnt et du coup est ce que vous avez une idée sur comment on traduis ca en assembleur x86
Hxyp
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
54
Modifié par Hxyp le 3/12/2012 à 17:00
Modifié par Hxyp le 3/12/2012 à 17:00
Pas vraiment non, si ça peut vous aider voici le code asm pondu par gcc en utilisant ce code :
en asm :
#include <stdint.h> #include <stdio.h> typedef uint32_t (*CountFunction)(char *v,uint32_t size); uint32_t mafonction1(char *v,uint32_t size){ return 1; } int main(void){ CountFunction var; var=mafonction1; var("test",1); return 0; }
en asm :
.file "main.c" .text .globl mafonction1 .type mafonction1, @function mafonction1: pushl %ebp movl %esp, %ebp movl $1, %eax popl %ebp ret .size mafonction1, .-mafonction1 .section .rodata .LC0: .string "test" .text .globl main .type main, @function main: pushl %ebp movl %esp, %ebp andl $-16, %esp subl $32, %esp movl $mafonction1, 28(%esp) movl $1, 4(%esp) movl $.LC0, (%esp) movl 28(%esp), %eax call *%eax movl $0, %eax leave ret
salah dell
Messages postés
20
Date d'inscription
lundi 15 octobre 2012
Statut
Membre
Dernière intervention
22 mai 2013
4 déc. 2012 à 12:40
4 déc. 2012 à 12:40
est ce que vous aviez faites ca avec la commande :gcc -S porogramme.C ou bien y a un logiciel qui permet de traduire un programme c en assembleur merci de votre aide ;)
Hxyp
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
54
Modifié par Hxyp le 4/12/2012 à 15:25
Modifié par Hxyp le 4/12/2012 à 15:25
Exact j'ai bien utilisé l'option -S de gcc. Enfin ça ne vous aidera qu'à voir que le typedef que vous avez donné en C est fait pour simplifier le code c'est un raccourci/outils du language C, une fois en asm ça n'y figure plus.