Page 1 sur 1

Conversion C vers PB

Publié : mer. 26/mars/2014 16:06
par Mesa
Je bloque sur ce transtypage :
Comment traduire ça en pb ?

Code : Tout sélectionner

A.d = 10.0
B.d=15.0
flag.d=1.0
A =  A +  flag*(double)(int)(B /15.0+0.5)/24.0
Debug A
Debug StrD(A)
Je ne comprends pas l'ordre des parenthèses et j'hésite entre int() et round( , #PB_Round_Down)

M.

Re: Conversion C vers PB

Publié : mer. 26/mars/2014 17:15
par Ar-S
réponse G-Rom Ci dessous

Re: Conversion C vers PB

Publié : mer. 26/mars/2014 18:19
par G-Rom

Code : Tout sélectionner

A =  A +  flag*(double)(int)(B /15.0+0.5)/24.0
deviens :

Code : Tout sélectionner

A =  A +  flag *  int(B /15.0+0.5) / 24.0

le (double) entre parenthèse sert uniquement pour le casting vers flag ( qui est un double )

Re: Conversion C vers PB

Publié : mer. 26/mars/2014 19:58
par majikeyric
A ce sujet, j'ai passé ces derniers jours à étudier le code source de compilateurs C pour trouver des pistes pour créer un convertisseur C (ainsi) vers PB.
Mais ça demande un boulot énorme et je suis pas sure d'arriver au bout alors :lol:

J'ai vu sur le forum un post (de 2004) http://www.purebasic.fr/french/viewtopic.php?f=4&t=452
d'un début de projet de convertisseur, mais la méthode laissait à désirer... et le projet s'est arrété rapidement.

Re: Conversion C vers PB

Publié : mer. 26/mars/2014 20:11
par G-Rom
majikeyric a écrit :A ce sujet, j'ai passé ces derniers jours à étudier le code source de compilateurs C pour trouver des pistes pour créer un convertisseur C (ainsi) vers PB.
Mais ça demande un boulot énorme et je suis pas sure d'arriver au bout alors :lol:

J'ai vu sur le forum un post (de 2004) http://www.purebasic.fr/french/viewtopic.php?f=4&t=452
d'un début de projet de convertisseur, mais la méthode laissait à désirer... et le projet s'est arrété rapidement.

C'est impossible, car PB même si il est très proche du C , reste bien différent tout de même. je prends comme exemple simple un code du genre :

Code : Tout sélectionner

struct
{
	float a;
}foo;

foo A;

foo & foo_a()
{
	return A;
}

foo * foo_B()
{
	return &A;
}
Le retour par référence n'existe pas en PB , l'affectation de structure au moment de l'initialisation n'est pas supporté non plus , et j'en passe. Tu peu en revanches codé facilement une moulinette de header qui convertit les .h / .hpp vers du code PureBasic, à condition que le code C ne contienne pas trop de "trucs exotique"

Re: Conversion C vers PB

Publié : mer. 26/mars/2014 20:24
par majikeyric
Je ne connais pas cette notation en C :

Code : Tout sélectionner

foo & foo_a()
{
   return A;
}
c'est du C++ ?

Certaines choses en C n'ont pas d'équivalent en PB. Mais j'aurais essayé de bidouiller un workaround....

Re: Conversion C vers PB

Publié : mer. 26/mars/2014 20:35
par G-Rom
C'est du C , C'est un retour par référence.

Un peu comme ci tu faisait cela en PB ( pas possible evidement ) :

Code : Tout sélectionner

Structure maStruct
  A.l
EndStructure


Global myVar.maStruct

Procedure.maStruct foo()
  myVar\A = 55  
procedurereturn myVar
EndProcedure 


myOtherVar.maStruct = foo()

Re: Conversion C vers PB

Publié : mer. 26/mars/2014 20:57
par majikeyric
Ok, je n'ai jamais utilisé cette notation quand je faisais du C (il y a 15 ans).

Re: Conversion C vers PB

Publié : jeu. 27/mars/2014 10:10
par Mesa
INT() : C'est ce que je pensais et comme j'utilise des 'double', il faut plutôt utiliser intQ().

M.