Bene, ti sei deciso a postare il codice completo e, come al solito in questi casi, è tutta un'altra storia!
Ragioniamoci sopra...
E' vero, il prodotto della compilazione del tuo codice è un programma funzionante, sebbene c'è un punto che mi lascia piuttosto perplesso. Nella funzione <b>FF1</b> esegui il calcolo del cubo in doppia precisione <b>ma il valore restituito è di tipo intero (!)</b>. Ma , allora, che senso ha svolgere l'operazione in doppia precisione, non ti pare? :-|
Personalmente, il codice completo definitivo di questo pur semplice programmino lo vedrei così:<code>---------------------------------------------
// File header CPPFOR77.H:
#include <iostream.h>
#include <conio.h>
extern "C"
{
void FR1(double*, double *);
double FF1(double*);
}
---------------------------------------------
* File sorgente FOR77.FOR:
SUBROUTINE FR1_(N, M)
C COMPUTES THE SQUARE OF N, RETURNS IN M
REAL*8 M, N
M = N**2
RETURN
END
C
REAL*8 FUNCTION FF1_(N)
C COMPUTES THE CUBE OF N
REAL*8 N
FF1_ = N**3
RETURN
END
---------------------------------------------
// File sorgente CPP.CPP:
#include "cppfor77.h"
int main()
{
double n, nSquare, nCube;
cout << "Inserire il valore della variabile reale ""n:"" ";
cin >> n;
cout << endl;
FR1(&n, &nSquare);
cout << n << "^2 = " << nSquare << endl;
nCube = FF1(&n);
cout << n << "^3 = " << nCube << endl;
cout << "\nPremere un tasto per terminare... ";
getch();
cout << endl;
return 0;
}
---------------------------------------------</code>Per quanto riguarda il problema da te riscontrato con l'istruzione <b>PRINT*, M</b>, non saprei, onestamente, cosa pensare: in primo luogo, perchè a me non succede 8-) e, in secondo luogo, perchè non riesco a capire a cosa si riferiscono i simboli <b>s_wsle</b>, <b>do_lio</b> ed <b>e_wsle</b> (nel mio file oggetto tali simboli non esistono!). Poichè probabilmente sono simboli generati internamente da codice di libreria, l'unica cosa che ti consiglio di fare è quella di dare un'occhiata, con un editor esadecimale, al contenuto delle rispettive locazioni indicate all'interno del file oggetto file_fortran.o(<b>.text+0x1e</b>), file_fortran.o(<b>.text+0x35</b>) e file_fortran.o(<b>.text+0x3d</b>) (ciascuna delle quali si riferisce al relative virtual address della sezione codice - .text - più l'offset indicato) e vedere, per curiosità, cosa trovi la' in giro.
Inoltre, potresti provare a togliere l'asterisco che segue il token PRINT in quanto, di norma, il FORTRAN standard non lo prevede e osservare se cambia qualcosa.
Buona fortuna! ;-)