Je dois compiler le programme suivant :
#include "stdio.h";
long int factorielle(int n) {
if (n<2) return 1; else return n*factorielle(n-1);
}
int main(int argc, char *argv[]){
int i;
printf("Hello World!\n\n");
for(i=0;i<10;i++)
printf("%i! = %li\n",i,factorielle(i));
return 0;
}
J'utilise les commandes suivantes :
cc -c -S toto.c
as -o toto.o toto.s
Pas de problèmes à ce stade. Par contre l'utilisation de la commande ld s'avère délicate. J'ai finalement réussi à m'en servir de cette façon :
ld -o toto /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtn.o /usr/lib/libc.so toto.o
Aucune erreur n'est apparue mais il m'est impossible d'exécuter le programme résultant (bien sûr j'ai fait un chmod)
Je dois absolument utiliser cc, as et ld.
Quelqu'un pourrait il m'aider ?
Merci d'avance...
# il y en manque des options
Posté par TheBreton . Évalué à 3.
ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.1 -o toto
/usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtbegin.o
-L/usr/lib/gcc-lib/<A COMPLETER> toto.o -lm -lgcc -lc -lgcc
/usr/lib/crtend.o /usr/lib/crtn.o
voici un lien pour plus d'info
http://www.ensta.fr/~gueydan/Poly/Html/node8.html#SECTION034(...)
[^] # Re: il y en manque des options
Posté par atalmapi . Évalué à 2.
# Je ne pense pas que ce soit l'erreur...
Posté par Dan . Évalué à 2.
#include "stdio.h";
ça s'écrit pas plutôt
#include <stdio.h>
?
À moins qu'il y ait un truc que je ne connais pas... Je débute seulement.
[^] # Re: Je ne pense pas que ce soit l'erreur...
Posté par atalmapi . Évalué à 5.
#include <stdio.h> -> Va chercher stdio.h dans les répertoire d'inclusion
Dans notre cas ça ne pose pas de soucis, mais c'est vrai que pour les librairies systèmes on met plutôt #include < >
[^] # Re: Je ne pense pas que ce soit l'erreur...
Posté par alf . Évalué à 1.
# Un indice :
Posté par Gauthier Monserand (site web personnel) . Évalué à 3.
Je triche ? non ...
[^] # Re: Un indice :
Posté par Mildred (site web personnel) . Évalué à 3.
[^] # Re: Un indice :
Posté par Gauthier Monserand (site web personnel) . Évalué à 2.
[^] # Re: Un indice :
Posté par atalmapi . Évalué à 2.
Merci à tous de vos réponses, on a jamais fini d'apprendre ;-)
[^] # Re: Un indice :
Posté par ecid . Évalué à 3.
http://franckh.ftp-developpez.com/recursivite-en-langage-c.p(...)
en particulier du côté de la récursivité terminale.
# Débordement
Posté par alf . Évalué à 1.
En utilisant un autre type (comme unsigned long, voire long long ou stdint.h si tu l'as sous la main), tu augmentes le domaine où ta fonction est utile, mais la gestion d'erreur doit être implémentée, quel que soit le type.
Proposition (non testée) : J'ai juste fait la correction de l'implémentation, mais l'algorithme de calcul présenté ici (application naïve de l'algorithme par récursion non terminale) est largement sous-optimal. Je suppose que le côté algorithmique sera étudié séparément...
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.