Les pointeurs de fonctions

Postée le 25/04/2007 - 14h09 par a30barrett40, a suscité 1 commentaires



Nous allons aller dans le vif du sujet directement.
En 1er, comment déclarer un pointeur de fonction.
Quel type allons nous utiliser ??
Bingo ! le type void* !
Donc on obtient :
void *p = NULL;

Il y a un problème : c'est quoi l'adresse de la fonction?
En fait, l'adresse d'une fonction est la première instruction qu'elle contient, vachement utile!
On va donc tester comme avec un pointeur normal, c'est-à-dire:
p = &fonction;

Mais cela ne marche pas... : n o o o :
On va faire des tests avec une fonction simple :
void fonction()
{
    printf("ca marche !\n);
    getchar();
}

En premier, indiquons que le pointeur est un pointeur de fonction :
void (*p)();


Pourquoi toutes ces paranthèses ?
Voilà la réponse :

* est un opérande utilisé en préfixe et il a une priorité plus faible que () ; c'est pourquoi les parenthèses sont nécessaire pour forcer l'association correcte.


Donc cela perrmet de passer * en priorité (comme en maths, 2+3*2 est différent de (2+3)*2 !)
On peut donc recompiler!

Prenons une autre fonction :
int fonction2(int a, int b)
{
    return a += b;
}

Les secondes parenthèses dans la déclaration du pointeur deviennent utiles, car quel que soit la fonction, un pointeur de fontion ne peut contenir que les fonction qui ont les mêmes types des paramètres.
En gros :
void (*p)();
p = &fonction2;

est faux, il faut mettre int, int entre les secondes parenthèses.

Avant de s'en servir, une petite chose :

Un nom de fonction est automatiquement converti en pointeur sur cette fonction, il n'y a pas besoin du & mais c'est permis et il n'y a pas vraiment de différence.


Donc on peut mettre
p = fonction2 ;
.

Les bibliothèques

Postée le 08/03/2007 - 13h40 par a30barrett40, a suscité 9 commentaires



Bonjour à tous,
vous vous demandez sûrement comment on crée un fichier DLL, en réalité c'est assez simple, mais c'est comme vous le savez sûrement une bibliothèque dynamique, il faut déjà savoir créer une bibliothèque statique (c'est-à-dire liée à l'exécutable). On va en créer une simple.

Premièrement, créez un projet librairie statique, mais suprimer tout le code qu'il y a dans le fichier (s'il y a). Faitez deux fichiers, un .c et un .h nommé de la même manière. On va faire une fonction qui calcule un carré (pour commencer).
Dans le .c, mettez le code de la fonction, c'est-à-dire :
double carre (double a)
{
    return pow(a, 2);
}

incluez dedans le .h dans lequel vous avez mis le prototype de la fonction.
Compilez le fichier, vous obtenez un .a (ou .lib pour visual C++).
Créez ensuite un projet simple dans lequel vous utilisez cette fonction, incluez le .h, allez dans les options du projet, et ajoutez votre librairie faite avant.
Compilez et essayez.

Maintenant, on va faire des fichiers DLL (attention, uniquement du C pur, pas du C++, sinon faites des librairies statiques !). La méthode (on va reprendre la même fonction que pour la librairie statique):
  - Faites un projet dll.
  - Refaites un .c et un .h
  - écrivez la fonction
Ensuite, comme c'est un peut trop facle de faire comme ça, il faut indiquez que la fonction sera exporté vers le programme avec l'instruction :
__declspec (dllexport)
entre le type de la fonction et son nom.
Dans le .h, mettez
__declspec (dllimport)
à la place.
Compilez, vous obtenez un .a et le .dll.

Il y a deux manières de charger un .dll, de manière implicite (pour les fichiers portables) et de manière explicite (pour les programmes pour windows uniquement). On va faire uniquement la première.
C'est comme pour une librairie statique, mais il faut pas oublier de mettre le .dll avec le .exe dans le même dossier.

Bonne programmation à tous!

[TUTORIEL en C ] S'amuser à colorer la console

Postée le 15/02/2007 - 19h30 par Advandced, a suscité 0 commentaires



J'ai cherché sur le net comment colorer la console, c'est à dire , changer la couleur de fond ou alors la couleur d'écriture et j'ai trouvé ceci.

Il suffit de mettre ce code
system("color *");
(remplacé * par une valeur) avant la fin du programme c'est à dire avant
system("pause");
    return 0;
}

Ou sans
system("pause");
si vous ne l'avez pas mis dans votre code.

Donc je vous propose un bout de code avec l'écriture style couleur matrix , et un deuxième code avec un fond bleu et ecriture blanche.

1er code:
#include <stdio.h>
#include <stdlib.h>



int main(int argc, char *argv[])
{
    
   printf("Piti message vert matrix");
  
   system("color 2");
   system("pause");
   return 0;
}



2ème code :
#include <stdio.h>
#include <stdlib.h>



int main(int argc, char *argv[])
{
    
   printf("Piti message vert matrix");
  
   system("color 17");
   system("pause");
   return 0;
}


Et voila le tour est jouer , montré vos exploits à vos potes pour les impressionnés à ne plus voir leur console de la même couleur  :) .
Je vous souhaite à tous un bon coding.

Et ici un exemple : Cliquez-ici