[PLUTO-devel] linkink eterogeneo fortran-C++

Gregorio D'Agostino dagostin a casaccia.enea.it
Ven 31 Ott 2003 16:10:30 CET


Caro Piero 

gentilmente hai risposto:
> [...]
> GDA> int main()
> GDA> {
> GDA>     extern static void twice_(double *);
> [...]
> GDA> mi dà errore:
>
> GDA> test_cpp.cpp: In function `int main()':
> GDA> test_cpp.cpp:8: multiple storage classes in declaration of `twice_'
> GDA> test_cpp.cpp:8: cannot declare static function inside another function
>
> prova a dichiarare la twice al di fuori di main :-]
>
>
>
e devo dire GRAZIE!
Sei stato un po' criptico parlando con uno che conosce appena il C++ come me!
ho provato 20 volte diverse varianti dell'istruzione mettendola DOPO il main! 
Inutilmente.
Poi ho provato a metterla PRIMA e ... miracolo funziona.

La sintassi esatta che ha funzionato 
(lo dico per chi dovesse avere lo stesso problema mio) è

#include<stdio.h>
#include<stdlib.h>
#include<stdarg.h>
#include<stl.h>
#include<string>

extern "C" void twice_(double *a) ;

int main()
{

    static double a;

    cin >> a ;

    cout << a << endl ;

    twice_(&a) ;

    cout << a << endl ;
}

Senza "static" in giro che causa errore.

Ringrazio ancora tutti.
Nel frattempo ho letto un centinaio di pagine sul mangling il che mi 
ha causato una confusione non comune, ma penso d essere in grado
di lincare piu' o meno tutto.

Adesso pero' che comincio a conoscere C++ penso che, pur essendo un fisico,
cerchero' di scrivere i miei futuri codici in C++.      :-)

Cordialmente
Gregorio


Maggiori informazioni sulla lista pluto-devel