262
Le logiciel R - Maˆ ıtriser le langage
Les arguments de la fonction C/C++ fonctionC sont : double * x et int * n.
La mˆ eme remarque s’applique pour une fonction en Fortran.
Remarque
La fonction C/C++ combnC ne renvoie rien (void en anglais) directement.
Par contre, la valeur de ses arguments, qui sont des pointeurs, peut ˆ etre
modifi´ ee pendant l’ex´ ecution de celle-ci. Et il est ensuite possible d’acc´ eder
directement (par leur adresse en fait) aux valeurs de ces pointeurs. C’est de
cette fa¸ con (mais de mani` ere transparente pour l’utilisateur) que R fonctionne au moyen de la fonction .C().
Par ailleurs, vous aurez not´ e en ligne 5 du code de la fonction combnRC() cidessus, l’utilisation de res= dans l’appel de la fonction .C(). Ceci permet
ensuite d’utiliser out$res directement, `
a la place de out[[1]]. On peut
utiliser un autre nom que res, et ceci sur n’importe lequel des arguments
de la fonction .C(). Nous aurions ainsi pu utiliser val=as.integer(m), ce
que nous n’avons pas fait car cette valeur n’a pas ´ et´ e modifi´ ee par combnC,
et est donc d´ ej` a connue (comme ´ etant m). Le mˆ eme genre de remarque
s’applique pour une fonction en Fortran.
Nous allons maintenant cr´ eer le fichier combn.dll, qui sera celui appel´ e par
R. Pour cela, tapez les instructions suivantes dans la fenˆ etre MS-DOS :
:: En C/C++:
g++ -c combn.cpp -o combn.o
g++ -shared -o combn.dll combn.o
:: En Fortran:
gfortran -c combn.f90 -o combn.o
g++ -shared -o combn.dll combn.o
Astuce
Une fa¸ con ´ equivalente (ou presque car des arguments d’optimisation
pourraient ˆ etre utilis´ es par le compilateur, ce qui peut d’ailleurs gˆ ener une
´ eventuelle activit´ e de d´ ebogage) pour cr´ eer cette librairie dynamique est
(apr` es avoir ´ eventuellement effac´ e les fichiers combn.o et combn.dll) d’utiliser l’unique instruction : R CMD SHLIB combn.cpp -o combn.dll
La premi` ere instruction cr´ ee le fichier objet combn.o, qui contient le code
machine de la fonction contenue dans le fichier combn.cpp. La deuxi` eme instruction cr´ ee la biblioth` eque (librairie) dynamique combn.dll. `
A cette ´ etape,
le compilateur nous informe des ´ eventuelles erreurs ` a corriger dans notre programme (avec le num´ ero de ligne correspondant).
Précédent

- 295/701

Suivant