Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
5170 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  invalid preprocessing directive #p

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

invalid preprocessing directive #p

n°366791
theorie du​ chaos
morte et enterrée
Posté le 18-04-2003 à 20:09:00  profilanswer
 

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
mood
Publicité
Posté le 18-04-2003 à 20:09:00  profilanswer
 

n°366795
Taz
bisounours-codeur
Posté le 18-04-2003 à 20:12:03  profilanswer
 

de l'interet du x en paramètre?
 
p != 0) ? tu veux dire NULL ou *p!=0 ??

n°366797
mrbebert
Posté le 18-04-2003 à 20:14:14  profilanswer
 

Code :
  1. ...
  2. int p;
  3. ...
  4. sortir (*p)

Comment tu peux déréférencer p qui n'est qu'un entier :??:

n°366798
Taz
bisounours-codeur
Posté le 18-04-2003 à 20:15:06  profilanswer
 

sinon, un compilo ça peut servir aussi :ange:

n°366800
theorie du​ chaos
morte et enterrée
Posté le 18-04-2003 à 20:16:16  profilanswer
 

je voudrais dire
 
valeur stockee a l adresse p non nulle

n°366801
Poireau
Posté le 18-04-2003 à 20:16:18  profilanswer
 

Ton code en plus jolie :

Code :
  1. void inserer (int x)
  2. {
  3.     printf("Veuillez saisir une liste de valeurs au clavier\n" )
  4.     scanf("%d", &x);
  5.     while (x != -1)
  6.     {
  7.         inserer (x)
  8.         scanf("%d", &x)
  9.     }
  10. }
  11. int sortir (int *p)
  12. {
  13.     printf("La liste triee obtenue est\n" )
  14.     while (p != 0)
  15.     {
  16.         sortir (&p) ;
  17.         printf("%d", p) ;
  18.     }
  19. }
  20. int main ()
  21. {
  22.     int x;
  23.     int p;
  24.     inserer (x);
  25.     sortir (*p) ;
  26. }


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...

n°366802
Tetragramm​aton IHVH
dieu unique => pensée unique
Posté le 18-04-2003 à 20:17:11  profilanswer
 

Theorie du chaos a écrit :


 
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)
  }
 }
 


 
C'est quoi l'interet de la recursion dans ce cas ?


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°366803
Poireau
Posté le 18-04-2003 à 20:18:40  profilanswer
 

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 ?

n°366804
theorie du​ chaos
morte et enterrée
Posté le 18-04-2003 à 20:18:46  profilanswer
 

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 :D
 
je v chercher un cours...

n°366805
theorie du​ chaos
morte et enterrée
Posté le 18-04-2003 à 20:21:35  profilanswer
 

inserer et sortir sont fournis par mon prof en "pseudo C"
je peux pas trop y toucher (a part pour les fautes de syntaxe)

mood
Publicité
Posté le 18-04-2003 à 20:21:35  profilanswer
 

n°366806
theorie du​ chaos
morte et enterrée
Posté le 18-04-2003 à 20:22:27  profilanswer
 

Tetragrammaton IHVH a écrit :


 
C'est quoi l'interet de la recursion dans ce cas ?

ca appelle un programme en assembleur...
faut il differencier les noms?

n°366808
Tetragramm​aton IHVH
dieu unique => pensée unique
Posté le 18-04-2003 à 20:24:50  profilanswer
 

Theorie du chaos a écrit :

ca appelle un programme en assembleur...
faut il differencier les noms?


 
Bah oui [:spamafote]


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°366809
theorie du​ chaos
morte et enterrée
Posté le 18-04-2003 à 20:30:21  profilanswer
 

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?

n°366815
Tetragramm​aton IHVH
dieu unique => pensée unique
Posté le 18-04-2003 à 20:40:19  profilanswer
 

Theorie du chaos a écrit :


 
Comment je fais pour designer la valeur a l adresse p?


 
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


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°366821
theorie du​ chaos
morte et enterrée
Posté le 18-04-2003 à 20:48:15  profilanswer
 

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?

n°366823
Tetragramm​aton IHVH
dieu unique => pensée unique
Posté le 18-04-2003 à 20:48:38  profilanswer
 

A propos :

Code :
  1. sort (&p)


 
plantera à la compil puisque tu lui passes un int** alors que le proto de la fonction sort() est défini comme  

Code :
  1. sort(int*)


 
En gros ça veut rien dire.


Message édité par Tetragrammaton IHVH le 18-04-2003 à 20:49:02

---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°366830
Tetragramm​aton IHVH
dieu unique => pensée unique
Posté le 18-04-2003 à 20:51:58  profilanswer
 

Theorie du chaos a écrit :

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?


 
oula, tu te mets à la programmation ASM alors que tu connais à peine le C ?  :heink:  
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 {}
 


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°366834
theorie du​ chaos
morte et enterrée
Posté le 18-04-2003 à 20:54:34  profilanswer
 

en fait on a deja rendu un tp uniquement en assembleur

n°366835
theorie du​ chaos
morte et enterrée
Posté le 18-04-2003 à 20:56:33  profilanswer
 

vu le sujet c est la solution 1 ...
 
je vais en rever cette nuit de ce TP :d

n°366846
theorie du​ chaos
morte et enterrée
Posté le 18-04-2003 à 21:23:15  profilanswer
 

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 :D

n°367065
theorie du​ chaos
morte et enterrée
Posté le 19-04-2003 à 11:00:57  profilanswer
 

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

n°367144
chrisbk
-
Posté le 19-04-2003 à 13:54:34  profilanswer
 

Theorie du chaos a écrit :

vu le sujet c est la solution 1 ...
 
je vais en rever cette nuit de ce TP :d


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é:D
 
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
 
 
 
 
 
 
 
 

n°367146
chrisbk
-
Posté le 19-04-2003 à 13:56:42  profilanswer
 

Theorie du chaos a écrit :

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


 
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 ?
 
 
 
 

n°367169
theorie du​ chaos
morte et enterrée
Posté le 19-04-2003 à 15:03:05  profilanswer
 

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?

n°367170
theorie du​ chaos
morte et enterrée
Posté le 19-04-2003 à 15:03:22  profilanswer
 

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?

n°367173
theorie du​ chaos
morte et enterrée
Posté le 19-04-2003 à 15:08:57  profilanswer
 

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?

n°367185
chrisbk
-
Posté le 19-04-2003 à 15:46:16  profilanswer
 

yep, les parametres sont empilé de droite a gauche

n°367186
chrisbk
-
Posté le 19-04-2003 à 15:48:07  profilanswer
 

Theorie du chaos a écrit :

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?


 
modifie eax, ca veut dire quoi ? il ecrit dans eax et tu aimeras recup cette valeur en C ? ca oui c possible


Message édité par chrisbk le 19-04-2003 à 15:48:39
n°367202
theorie du​ chaos
morte et enterrée
Posté le 19-04-2003 à 16:07:05  profilanswer
 

chrisbk a écrit :


 
modifie eax, ca veut dire quoi ? il ecrit dans eax et tu aimeras recup cette valeur en C ? ca oui c possible

comment? :love: :love:
 
declaration de variable globale?

n°367207
chrisbk
-
Posté le 19-04-2003 à 16:13:33  profilanswer
 

Theorie du chaos a écrit :

comment? :love: :love:
 
declaration de variable globale?


 
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
 

n°367209
theorie du​ chaos
morte et enterrée
Posté le 19-04-2003 à 16:15:30  profilanswer
 

si je mets ca:


void main (){
 int eax ;
 printf("Veuillez saisir une liste de valeurs au clavier.\n
  Chaque valeur doit etre inferieure a 2^31-1." );
 scanf("%d", &x);
 while (x != -1) {
  inserer (x)
  scanf("%d", &x)
  };  
 eax = 1 /*eax, liste non vide au debut*/
 printf("La liste triee obtenue est\n" )
 while (eax != 0) {
  eax = sortir (&x)
  printf("%d\n", x)
  }

 
 
c est bon?

n°367211
chrisbk
-
Posté le 19-04-2003 à 16:17:34  profilanswer
 

theoriquement oui ;)

n°367213
theorie du​ chaos
morte et enterrée
Posté le 19-04-2003 à 16:18:22  profilanswer
 

merci :)

n°367217
theorie du​ chaos
morte et enterrée
Posté le 19-04-2003 à 17:06:56  profilanswer
 

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 :cry:

n°367219
chrisbk
-
Posté le 19-04-2003 à 17:08:59  profilanswer
 

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

n°367221
theorie du​ chaos
morte et enterrée
Posté le 19-04-2003 à 17:10:27  profilanswer
 

j ai les commandes d assemblage et de compilation

n°367222
theorie du​ chaos
morte et enterrée
Posté le 19-04-2003 à 17:11:02  profilanswer
 

et il faut un main dans le prog asm?

n°367223
chrisbk
-
Posté le 19-04-2003 à 17:11:25  profilanswer
 

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 ?


Message édité par chrisbk le 19-04-2003 à 17:11:53
n°367225
theorie du​ chaos
morte et enterrée
Posté le 19-04-2003 à 17:12:56  profilanswer
 

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)
 
un main dans la partie asm ? pkoi faire ?
tes trucs asm, c juste des fonctions que tu appelle depuis le C, non ?

oui :)

n°367226
chrisbk
-
Posté le 19-04-2003 à 17:15:22  profilanswer
 


 
alors tout va bien ?

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  invalid preprocessing directive #p

 

Sujets relatifs
[Oracle] Package invalid[C++] A quoi ca sert la directive extern "C"
[C++] Directive de compilation[openGL/Borland] > ERROR : GLUT32.LIB' contains invalid OMF record
Plus de sujets relatifs à : invalid preprocessing directive #p


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)