Lost in the matrix

C/C++/C#/Java, Multithreading

Voici une petite démonstration d'une implémentation des delegates que j'ai fait en langage C :)
Dans ce code, une fonction est déclarée en locale avec un nom unique, composé du mot
"__delegate__" et du numéro de la ligne courrante (__LINE__). Puis, l'adresse est stockée
dans la variable de l'utilisateur sous forme d'un pointeur sur fonction de type "Delegate".

#include <stdio.h>

#define CONCAT2(s1, s2) s1##s2
#define CONCAT(s1, s2) CONCAT2(s1, s2)
#define NewDelegate(Ptr, Expr) void \
        CONCAT(__delegate__, __LINE__)() Expr \
        Ptr = (Delegate)&CONCAT(__delegate__, __LINE__)

typedef void (*Delegate)(void);

void    PseudoDelegateTest()
{       
        int  i;
        Delegate my_delegate;

        NewDelegate(my_delegate,
        {
           printf("i = %d\n", i);
        });

        for (i = 0; i < 5; ++i)
            my_delegate();
}

int main(int argc, char **argv)
{
  PseudoDelegateTest();
  getchar();
  return (0);
}


Cela fait pas mal de temps que je m'intéresse à cet éditeur dont les possibilités sont infinies. En effet, j'ai eu l'occasion grâce à un ami, de le voir à l'oeuvre. Toutefois, il n'est pas toujours évident d'utiliser un autre éditeur quand on est habitué à un autre (personnellement j'utilise Emacs). Cet éditeur offre réellement une plus-value pour celui qui le maîtrise. Notamment grâce à son système de macros très bien pensé. Ainsi, j'ai appris les commandes de base et j'ai rédigé un document avec la liste des commandes élémentaires pour commencer avec Vim.


Voici le lien vers le document complet (pdf ou txt) : Commandes élémentaires de Vim


Lien vers le site officiel de Vim : www.vim.org