Typedef uint32_t (*CountFunction)(char *v, uint32_t size);
salah dell
Messages postés
20
Date d'inscription
Statut
Membre
Dernière intervention
-
Hxyp Messages postés 401 Date d'inscription Statut Membre Dernière intervention -
Hxyp Messages postés 401 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
svp qui peut m'expliquer ca
typedef uint32_t (*CountFunction)(char *v, uint32_t size);
je veux comprendre ca pour que je le traduis en assembleur x86 et merci d'avance.
svp qui peut m'expliquer ca
typedef uint32_t (*CountFunction)(char *v, uint32_t size);
je veux comprendre ca pour que je le traduis en assembleur x86 et merci d'avance.
A voir également:
- Typedef uint32_t (*CountFunction)(char *v, uint32_t size);
- Hyper-v download - Télécharger - Divers Utilitaires
- Net framework 4.0 v 30319 windows 7 - Télécharger - Divers Utilitaires
- Coco char - Accueil - Réseaux sociaux
- Touche c et v ne fonctionne plus ✓ - Forum Word
- Carte v-bucks lettre z switch ✓ - Forum Nintendo Switch
2 réponses
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; }
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 ;)
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; }
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