C'è un modo per dichiarare una funzione variadica C e chiamarla da Fortran? Devo chiamare questa funzione per calcolare alcuni prodotti punto tra vettori etichettati con una stringa. La mia idea era di dichiarare qualcosa di simile al seguente, dove l'elenco delle variabili degli argomenti contiene stringhe letterali. Se l'elenco delle variabili delle variabili è vuoto, eseguirò una ricerca tra le etichette standard ed eseguirò il calcolo. Se l'utente ha specificato due etichette vorrei recuperare quei due vettori e ottenere il loro prodotto scalare:Interoperabilità della funzione variadica C e Fortran
extern "C" void compute_dot_product(double * dot_product, ...)
{
va_list args;
va_start(args, NULL);
char * label1 = va_arg(args, char *);
if (!label1)
{
// Do standard label lookup and compute dot product
}
else
{
// Compute dot product between the vectors with the specified labels
char * label2 = va_arg(args, char *);
}
va_end(args);
}
l'unico problema è che posso compilare la mia libreria C e collegarlo a un eseguibile Fortran, ma ottengo un errore di runtime quando provo ad accedere alla lista variabile di argomenti. Qualche idea se quello che sto cercando di fare è possibile? Una possibile soluzione sarebbe quindi quella di dividere in due funzioni: una che esegue la ricerca dell'etichetta standard (caso 0 argomenti), l'altra che gestisce la ricerca dell'etichetta non standard (caso 2 argomenti). Preferirei evitare questa soluzione.
Deve essere dichiarato come cdecl su entrambi i lati. Il tuo errore di runtime potrebbe essere dovuto al fatto che un lato è stdcall e l'altro è cdecl. – cup