invalid preprocessing directive #p - C++ - Programmation
Marsh Posté le 18-04-2003 à 20:12:03
de l'interet du x en paramètre?
p != 0) ? tu veux dire NULL ou *p!=0 ??
Marsh Posté le 18-04-2003 à 20:14:14
Code :
|
Comment tu peux déréférencer p qui n'est qu'un entier
Marsh Posté le 18-04-2003 à 20:16:18
Ton code en plus jolie :
Code :
|
Juste pour ton main, au niveau semantique de reference, il y un petit problème.
Tu declare p en entier, et tu dois passer un pointeur sur entier a sortir, donc la syntaxe est sortir (&p).
Après, le tout me parait louche, je vois pas bien, c'est peut être normal...
Marsh Posté le 18-04-2003 à 20:17:11
Theorie du chaos a écrit : |
C'est quoi l'interet de la recursion dans ce cas ?
Marsh Posté le 18-04-2003 à 20:18:40
Je te conseille de faire le tout en itératif, ils ont du t'apprendre a programmer en recursif sous Ada dans ton école nan ?
Marsh Posté le 18-04-2003 à 20:18:46
le compilo m aidera pas...
notre prof de logiciel de base nous a "explique" le C pendant 3 heures...
et on est censes pouvoir programmer
je v chercher un cours...
Marsh Posté le 18-04-2003 à 20:21:35
inserer et sortir sont fournis par mon prof en "pseudo C"
je peux pas trop y toucher (a part pour les fautes de syntaxe)
Marsh Posté le 18-04-2003 à 20:22:27
Tetragrammaton IHVH a écrit : |
ca appelle un programme en assembleur...
faut il differencier les noms?
Marsh Posté le 18-04-2003 à 20:24:50
Theorie du chaos a écrit : ca appelle un programme en assembleur... |
Bah oui
Marsh Posté le 18-04-2003 à 20:30:21
new version
void insere (int x) {
printf("Veuillez saisir une liste de valeurs au clavier\n" )
scanf("%d", &x);
while (x != -1) {
inserer (x)
scanf("%d", &x)
}
}
int sort (int *p) {
printf("La liste triee obtenue est\n" )
while (p != 0) {
sortir (&p)
printf("%d", p)
}
int main ()
{int x;
int *p;
insere (x);
sort (&p)}
Comment je fais pour designer la valeur a l adresse p?
Marsh Posté le 18-04-2003 à 20:40:19
Theorie du chaos a écrit : |
int entier; // un entier
int* ptr; // un pointeur sur un entier (non initialisé)
ptr = &entier; // ptr pointe sur un entier
*ptr = 3; // affecte la valeur pointée par ptr
Au final entier contient 3
Marsh Posté le 18-04-2003 à 20:48:15
merci
autre question
je programme sortir en assembleur...
il rend un de ses resultats dans eax
comment je fais pour designer et utiliser eax dans le programme en C?
Marsh Posté le 18-04-2003 à 20:48:38
A propos :
Code :
|
plantera à la compil puisque tu lui passes un int** alors que le proto de la fonction sort() est défini comme
Code :
|
En gros ça veut rien dire.
Marsh Posté le 18-04-2003 à 20:51:58
Theorie du chaos a écrit : merci |
oula, tu te mets à la programmation ASM alors que tu connais à peine le C ?
Tu as 2 solutions:
* push sur la stack de eax et tu déclares l'import de la fonction avec une valeur de retour de type long int
* tu codes ta fonction en ASM dans le programmes C avec les mots clé asm {}
Marsh Posté le 18-04-2003 à 20:56:33
vu le sujet c est la solution 1 ...
je vais en rever cette nuit de ce TP
Marsh Posté le 18-04-2003 à 21:23:15
apres mure reflexion...
je passe a ca...
int main (){
printf("Veuillez saisir une liste de valeurs au clavier\n" )
scanf("%d", &x);
while (x != -1) {
inserer (x)
scanf("%d", &x)
};
int a = 1; /*eax, liste non vide au debut*/
printf("La liste triee obtenue est\n" )
while (a != 0) {
sortir (&x)
printf("%d", x)
a = eax
}
}
en sachant que pour le eax c faux... mais bon
on y va doucement
Marsh Posté le 19-04-2003 à 11:00:57
une fonction peut elle renvoyer plusieurs resultats?
sortir me renvoit une adresse et modifie un resultat dans eax
ou alors on peut declarer l import d une variable?
de la facon
long int fin_de_liste
Marsh Posté le 19-04-2003 à 13:54:34
Theorie du chaos a écrit : vu le sujet c est la solution 1 ... |
Sous visual (a conformer pour els autres compilo) :
fonction retourne un entier : resultat dans EAX
fonction retourne un flottant : st(0)
fonction retourne une struct de 8octets: resultat dans EDX:EAX
fonction retourne une struct de + de 8 octets : merdique on va laisser ca de coté
Donc comme toi tu tombe dans la premiere catégorie a priori t'aurais rien a faire, appelle juste ta fonction asm et zou. Par contre fait gaffe au convention d'apelle si ta fonction prends des params en entrée
eg : ta fonction prends des params via la pile et effectue le nettoage de la pile avant de sortir : _stdcall
ta fonction prends des params en entrée via la pile mais ne fait aucune nettoyage : _cdecl
Marsh Posté le 19-04-2003 à 13:56:42
Theorie du chaos a écrit : une fonction peut elle renvoyer plusieurs resultats? |
une fonction en peut retourner qu'un seul element (int/float, structure.....) par "return"
Si jamais tu as besoin de renvoyer plusieurs valeur alors il te faut passer par ls params out/inout
en c pour faire ca t'as besoins des pointeurs (la hantise du debutant), t'as vu ca en cours ?
Marsh Posté le 19-04-2003 à 15:03:05
j ai pas vu in out en C
en fait mon prog "sortir" en assembleur met un entier a l adresse x et modifie eax
s il est declare en
int sortir (int *p);
c est possible de recupere eax et l entier?
Marsh Posté le 19-04-2003 à 15:03:22
j ai pas vu in out en C
en fait mon prog "sortir" en assembleur met un entier a l adresse x et modifie eax
s il est declare en
int sortir (int *p);
c est possible de recupere eax et l entier?
Marsh Posté le 19-04-2003 à 15:08:57
comment je fais pour recuperer les parametre du programe C dans mon prog assembleur
pour inserer (x) par exemple...
est ce que le x est mis dans la pile?
Marsh Posté le 19-04-2003 à 15:48:07
Theorie du chaos a écrit : j ai pas vu in out en C |
modifie eax, ca veut dire quoi ? il ecrit dans eax et tu aimeras recup cette valeur en C ? ca oui c possible
Marsh Posté le 19-04-2003 à 16:07:05
chrisbk a écrit : |
comment?
declaration de variable globale?
Marsh Posté le 19-04-2003 à 16:13:33
Theorie du chaos a écrit : comment? |
non
le compilo s'attends a recevoir le resultat de ton operation sur EAX. Donc si tu ecris sur eax, tu quitte ta fonction, le prog c revenant ira piocher le resultat dans eax
Marsh Posté le 19-04-2003 à 16:15:30
si je mets ca:
|
c est bon?
Marsh Posté le 19-04-2003 à 17:06:56
est ce qu il faut un main dans le programme assembleur contenant inserer et sortir?
inserer et sortir doivent-ils etre dans deux fichiers differents?
que mettre dans le main pour utiliser les parametres donnes dans le programme C avec sortir et inserer?
mon main du moment...
main:
pushl %ebp
movl %esp, %ebp
call inserer
addl $4, %esp
call sortir
addl $4, %esp
jmp fin
y a pas de parametres
Marsh Posté le 19-04-2003 à 17:08:59
hola, alors a partir de maintenant c merdique en diable, et la fo qu'un specialiste du gcc vienne t'aider. fo compiler tes .asm en .obj (ou equivalent) et les utiliser pour le link....
Sous vc je peux te dire comment, mais sous gcc aucune idée
Marsh Posté le 19-04-2003 à 17:11:25
ben tu convertis tes asm en obj par la commande ad hoc et tu link avec. Neanmoins faudra ptet changer le nom de ets fonctions asm (eg rajouter un "_" devant)
un main dans la partie asm ? pkoi faire ?
tes trucs asm, c juste des fonctions que tu appelle depuis le C, non ?
Marsh Posté le 19-04-2003 à 17:12:56
chrisbk a écrit : ben tu convertis tes asm en obj par la commande ad hoc et tu link avec. Neanmoins faudra ptet changer le nom de ets fonctions asm (eg rajouter un "_" devant) |
oui
Marsh Posté le 18-04-2003 à 20:09:00
void inserer (int x) {
printf("Veuillez saisir une liste de valeurs au clavier\n" )
scanf("%d", &x);
while (x != -1) {
inserer (x)
scanf("%d", &x)
}
}
int sortir (int *p) {
printf("La liste triee obtenue est\n" )
while (p != 0) {
sortir (&p)
printf("%d", p)
}
int main ()
{int x;
int p;
inserer (x);
sortir (*p)}
j aimerais savoir si mon main est correct, vu le reste du prog
Message édité par theorie du chaos le 22-04-2003 à 19:14:47