2009-04-23 7 views
3

l'aide de Visual Studio 9 sur Windows 64 avec Intel Fortran 10,1C à Fortran appeler problème

J'ai une fonction C appelant Fortran, passer une chaîne littérale « xxxxxx » (mis fin non nulle) et la longueur passé caché arg 6 Fortran l'obtient bien puisque le débogueur reconnaît qu'il s'agit d'un caractère (6) var et qu'il a la bonne chaîne, mais quand j'essaie d'assigner un autre caractère Fortran * 6 var, j'obtiens l'erreur la plus étrange.

forrtl: severe (408): fort: (4): Variable Vstring has substring ending point 6 which is greater than the variable length 6

- appel C -

SETPR("abcdef",6); 

- sous-routine Fortran -

subroutine setpr(vstring) 

character*(*) vstring 

character*6 prd 

prd(1:6) = vstring(1:6) 

return 

end 
+1

ajouter des extraits de code, afin que quelqu'un qui connaît Fortran puisse les analyser. – lothar

+0

En effet, du code serait utile. En particulier, la déclaration de sous-programme Fortran et l'appel de C. –

+0

ne devraient pas être SETPR ("abcdef", 7); Les chaînes C ont un ''\ 0' final. – dsm

Répondre

1

J'ai essayé avec le processeur Intel C compilateur et le compilateur Intel Fortran. Cela a donné, en C,

#include <stdio.h> 

int main(void) 
{ 
    extern void test_f_(char*, int); 

    test_f_("abcdef",6); 
} 

et, Fortran,

subroutine test_f(s) 
    implicit none 
    character*(*), intent(in) :: s 

    character*6 :: c 

    write (*,*) 'S is ', s 
    write (*,*) 'Length of S is', len(s) 

    c = s 
    write (*,*) 'Implicit-copied C is ', c 

    c(1:6) = s(1:6) 
    write (*,*) 'Range-copied C is ', c 
end subroutine test_f 

Lorsque compilé et exécuté, il produit

S is abcdef 
Length of S is   6 
Implicit-copied C is abcdef 
Range-copied C is abcdef 

Quelle est votre déclaration dans la routine C pour le type de la routine Fortran? Êtes-vous sûr que les tailles des variables de caractères et de nombres entiers sont les mêmes entre les codes C et Fortran?

+0

Je n'utilise pas le compilateur Intel C ici. Cela fonctionne bien sur la version Linux. Ce problème est avec le compilateur MSVC sur Windows. – user72260

+0

La déclaration en C de la routine Fortran est-elle la même que celle indiquée ici? –

+0

Oui et non. L'original est le code que je ne peux pas partager parce que l'entreprise est paranoïaque à propos de la libération de la source. C'est juste une façon de le voir échouer de la même manière. – user72260

Questions connexes