Typedef uint32_t (*CountFunction)(char *v, uint32_t size);
salah dell
Messages postés
22
Statut
Membre
-
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
- Touche c et v ne fonctionne plus ✓ - Forum Word
- Carte v-bucks lettre z switch ✓ - Forum Nintendo Switch
- Tree size - Télécharger - Gestion de fichiers
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