Un prog en C compilé sous Linux sera-t-il executable sous NT ?

Un prog en C compilé sous Linux sera-t-il executable sous NT ? - C++ - Programmation

Marsh Posté le 08-04-2002 à 19:16:08    

that the question :??:


---------------
http://forum.aceboard.net/forum1.p [...] login=1408les amis de seb31
Reply

Marsh Posté le 08-04-2002 à 19:16:08   

Reply

Marsh Posté le 08-04-2002 à 19:19:38    

Mais bien sûr !!!!! Dans du papier alu !


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 08-04-2002 à 19:20:29    

Plus sérieusement, va faire un tour sur http://www.cygwin.com/
Tu y trouveras un environnement de développement UNIX par-dessus Windows, permettant de compiler la plupart des applications qu'on trouve sous GNU/Linux.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 08-04-2002 à 19:31:35    

je crois que non : car le C ne peux tourné que sur l'os sur lequel il a ete compille :
pas de log C windows sur un mac (la gestion du processeur est !=)

Reply

Marsh Posté le 08-04-2002 à 19:35:23    

raph2209 a écrit a écrit :

je crois que non : car le C ne peux tourné que sur l'os sur lequel il a ete compille :
pas de log C windows sur un mac (la gestion du processeur est !=)


Là c'est encore pire, car ce n'est pas le même processeur.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 08-04-2002 à 20:00:13    

don la solution universelle  c'est de compiler le source sur l'OS cible :??:


---------------
http://forum.aceboard.net/forum1.p [...] login=1408les amis de seb31
Reply

Marsh Posté le 08-04-2002 à 21:11:30    

seb31 a écrit a écrit :

don la solution universelle  c'est de compiler le source sur l'OS cible :??:  




 
bien sûr que oui seb31 !!! tu le savais pas ???
c'est ce qu'on apprends en premier, non ?


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
Reply

Marsh Posté le 08-04-2002 à 21:48:20    

juju_le_barbare a écrit a écrit :

 
 
bien sûr que oui seb31 !!! tu le savais pas ???
c'est ce qu'on apprends en premier, non ?  




si je savais :d


---------------
http://forum.aceboard.net/forum1.p [...] login=1408les amis de seb31
Reply

Marsh Posté le 09-04-2002 à 05:50:59    

seb31 a écrit a écrit :

don la solution universelle  c'est de compiler le source sur l'OS cible :??:  




Pas necessairement si tu as un cross-compiler.
C'est de compiler le source pour l'OS cible.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 09-04-2002 à 10:04:38    

Non !
 
Voilà un réponse simple... :D

Reply

Marsh Posté le 09-04-2002 à 10:04:38   

Reply

Marsh Posté le 09-04-2002 à 15:29:20    

si tu veux faire des applis portables y a un truc pas mal qui se nomme java ... :)

Reply

Marsh Posté le 09-04-2002 à 15:34:01    

cooltwan a écrit a écrit :

si tu veux faire des applis portables y a un truc pas mal qui se nomme java ... :)  




 
depuis que ca existe les gens ont tendances à oublier que tout les languages ne sont pas portables comme l'es Java (enfin plus ou moins, inutile de lancer une polémique sur l'implémentation des JVMs)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 09-04-2002 à 16:12:55    

cooltwan a écrit a écrit :

si tu veux faire des applis portables y a un truc pas mal qui se nomme java ... :)  



spa du code exécutable du java, mais du pseudo code, c'est la jvm qui fait tout le reste  :D

Reply

Marsh Posté le 09-04-2002 à 17:31:27    

juju_le_barbare,
Je sais pas si c'est délibéré ou pas mais y'a une grosse erreur dans le code C de ta signature ;)
a+

 

[jfdsdjhfuetppo]--Message édité par skaska--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 09-04-2002 à 17:56:26    

skaska a écrit a écrit :

juju_le_barbare,
Je sais pas si c'est délibéré ou pas mais y'a une grosse erreur dans le code C de ta signature ;)


Y'a surtout une faute dans le nom de l'auteur de la citation, si je ne m'abuse.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 09-04-2002 à 19:17:29    

Jar Jar a écrit a écrit :

Y'a surtout une faute dans le nom de l'auteur de la citation, si je ne m'abuse.  




Pq d'après toi elle vient de qui ???
 
skaska : Le seul message que tu dise, c'est que je me trompe ??? ke t'e sméchant ;)
Nan je déconne, mais où est le pb ??? c'est du C++ pas du C, je vois pas d'erreur, dsl, si yen a dis le moi !!!


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
Reply

Marsh Posté le 09-04-2002 à 19:19:57    

Je viens de le compiler, et comme prévu pas d'erreur.
p e qu'en C c'est pas juste, mais en C++ si ...
 
@++ :hello:


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
Reply

Marsh Posté le 09-04-2002 à 19:28:54    

juju_le_barbare a écrit a écrit :

 
Pq d'après toi elle vient de qui ???




 
D'un gars qui avait presque le même nom que celui que tu cites:
Linus Torvalds


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 09-04-2002 à 19:46:49    

cooltwan a écrit a écrit :

si tu veux faire des applis portables y a un truc pas mal qui se nomme java ... :)  




 
[TROOL] Suxxx le java ....... Roxe le Perl !!!!!!  :D  [/TROOL]

Reply

Marsh Posté le 09-04-2002 à 20:03:46    

juju_le_barbare a écrit a écrit :

 
Pq d'après toi elle vient de qui ???
 
skaska : Le seul message que tu dise, c'est que je me trompe ??? ke t'e sméchant ;)
Nan je déconne, mais où est le pb ??? c'est du C++ pas du C, je vois pas d'erreur, dsl, si yen a dis le moi !!!  




 
Il n'y'a effectivement pas d'erreur de syntaxe c'est pour ca que ca compile, mais il reste que ta fonction est gravement buguée en C comme en C++, par la pire chose qu'on puisse faire, car très dur a detecter sur des gros programmes(car le programme peut très bien marcher un jour et ne plus marcher le lendemain, tu vas comprendre avec les explications).
 
Donc voilà le pb : tu retournes bien un pointeur vers une chaine de caractère, mais malheureusement cette chaine étant une variable locale a ta fonction, il n'y'a aucune raison que cette chaine soit encore là après l'appel de la fonction. Le système s'autorise a ecrire des choses par dessus si ce là lui plait. Ce qui explique que ton programme à l'air de marcher puisque tu as la chance que rien ne vienne l'écraser, mais faut faire très gaffe a ca car c'est pas du tout une manière correcte de coder!
 
C'est comme si tu faisait :
int *ma_fonction() {
  int i=10;
  return &i;
}
 
Tu retournes l'adresse ou etait stockée la valeur de i mais manque de bol a la fin de la fonction i n'existe plus, mais si tu croises les doigts effectivement peut etre que à l'adresse que tu retournes tu obtiendras un bon résultat... mais montre ca à n'importe quel prof de C(ou C++ si tu veux) il va sursauter.
 
Donc en bref si tu veux que ce soit ok il faut faire utiliser un malloc pour allouer de l'espace pour une chaine de caractère, et comme la mémoire allouée par les malloc n'est liberéé qu'avec un free, tu es sur qu'a l'adresse il y'aura toujours ta chaine.
Mais bon après c'est sur que c'est moins compact pour rentrer dans une signature...  
 
Oui c'était mon premier message car désolé mais quand j'ai vu ca j'étais horripilé, et obligé de m'inscrire pour rectifier ca :p
 
a+

Reply

Marsh Posté le 09-04-2002 à 21:07:11    

Perdu, le return "aaa"; est parfaitement valide parceque tu retournes un pointeur vers une chaine statique, en fait le vrai problème c'est que c'est un const char * et non pas un char * comme l'attend ta fonction.

Reply

Marsh Posté le 09-04-2002 à 21:13:02    

skaska a écrit a écrit :

 
 
Il n'y'a effectivement pas d'erreur de syntaxe c'est pour ca que ca compile, mais il reste que ta fonction est gravement buguée en C comme en C++, par la pire chose qu'on puisse faire, car très dur a detecter sur des gros programmes(car le programme peut très bien marcher un jour et ne plus marcher le lendemain, tu vas comprendre avec les explications).
 
Donc voilà le pb : tu retournes bien un pointeur vers une chaine de caractère, mais malheureusement cette chaine étant une variable locale a ta fonction, il n'y'a aucune raison que cette chaine soit encore là après l'appel de la fonction. Le système s'autorise a ecrire des choses par dessus si ce là lui plait. Ce qui explique que ton programme à l'air de marcher puisque tu as la chance que rien ne vienne l'écraser, mais faut faire très gaffe a ca car c'est pas du tout une manière correcte de coder!
 
C'est comme si tu faisait :
int *ma_fonction() {
  int i=10;
  return &i;
}
 
Tu retournes l'adresse ou etait stockée la valeur de i mais manque de bol a la fin de la fonction i n'existe plus, mais si tu croises les doigts effectivement peut etre que à l'adresse que tu retournes tu obtiendras un bon résultat... mais montre ca à n'importe quel prof de C(ou C++ si tu veux) il va sursauter.
 
Donc en bref si tu veux que ce soit ok il faut faire utiliser un malloc pour allouer de l'espace pour une chaine de caractère, et comme la mémoire allouée par les malloc n'est liberéé qu'avec un free, tu es sur qu'a l'adresse il y'aura toujours ta chaine.
Mais bon après c'est sur que c'est moins compact pour rentrer dans une signature...  
 
Oui c'était mon premier message car désolé mais quand j'ai vu ca j'étais horripilé, et obligé de m'inscrire pour rectifier ca :p
 
a+  




 
yeah cool la réponse !!! une inscription pour me le dire c'est sympa ;)
 
Donc après rectifications, ma signature, c'est :
 
 
char *rep; //variable globale
char *Test() //fonction de test
{
if (juju_le_barbare->Barbare)
  rep = "Parfait !!!";
else
  rep = "Erreur !";
return rep;
}
"Software is like sex, it's better when it's free"
--Linus Torvalds--
 
 
Je n'ai pas utilisé malloc, car c'est du C et je ne connais pas.
J'ai retourné l'adresse d'une variable globale, rep.
Le code est bon ?
PS : j'ai compris l'explication.
New appelle delete lorsque la fonction se termine, c'est juste ?


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
Reply

Marsh Posté le 09-04-2002 à 21:51:25    

juju_le_barbare a écrit a écrit :

 
 
char *rep; //variable globale
char *Test() //fonction de test
{
if (juju_le_barbare->Barbare)
  rep = "Parfait !!!";
else
  rep = "Erreur !";
return rep;
}
 
Je n'ai pas utilisé malloc, car c'est du C et je ne connais pas.
J'ai retourné l'adresse d'une variable globale, rep.
Le code est bon ?
PS : j'ai compris l'explication.
New appelle delete lorsque la fonction se termine, c'est juste ?  




 
Euh non pas vraiment :p
En fait ce qui pose problème c'est pas le pointeur qui contient l'adresse de retour, mais le contenu pointé par cette adresse, c'est à dire les chaines :
"Parfait !!!" et "Erreur !"
Elles sont stockées en mémoire dans ta fonction mais y'a pas de raison qu'elles le restent après l'appel a ta fonction, et donc le pointeur de retour qui pointe bien au bon endroit débouche directement vers un endroit qui n'est plus protégé par ton programme (d'ou le risque que la chaine se fasse écraser-> sous linux généralement ca donne presque a coup sur un segmentation fault)
Donc disons y'a plusieurs méthodes plus ou moins simples:
-En C++ tu as surement une classe String qui doit etre plus pratique que faire des malloc sur des char *
-Ou alors tu utilises malloc (ca m'étonne que ca existe pas en C++ car je vois pas a quoi serviraient les pointeurs, enfin bon je suis pas un pro de c++)
-Ou bien tu crée deux tableaux statiques globals de char qui contiennent tes deux chaines et tu renvois leur référence selon le cas où tu te trouves(assez crados de chez crados).
-Ou bien, le mieux je pense, et qui pourrait en plus bien passer en signature, c'est de faire :
 
int Test()
{
if (juju_le_barbare->Barbare)
return PARFAIT;
else
return ERREUR;
}
 
Et là c'est plus mieux (on supposera que PARFAIT et ERREUR sont définis avec le préprocesseur : #define )
 
Note au passage que t'as pas besoin de else non plus
 
int Test()
{
if (juju_le_barbare->Barbare)
return PARFAIT;
 
return ERREUR;
}

Reply

Marsh Posté le 09-04-2002 à 22:11:01    

Sa signature en Pascal d'avant était quand même plus pratique.
Là au moins Result := 'Parfait'; c'était valide :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed