Annotation of 43BSDTahoe/new/help/src/f77/link_to_c, revision 1.1.1.1

1.1       root        1: .TI F77/LINK_TO_C "Sep. 4, 1985"
                      2: Linking to C Procedures
                      3: 
                      4: C is a commonly used programming language in UNIX.  "A Portable
                      5: Fortran 77 Compiler" gives complete specification of the C/Fortran
                      6: interface.  This help file summarizes the basics for simple cases and
                      7: gives a simple example.
                      8: 
                      9: The following table from that paper lists corresponding Fortran and C 
                     10: declarations:
                     11: 
                     12: .nf
                     13:        Fortran                 C
                     14:        -----------             ---------
                     15:        integer*2 x             short int x;
                     16:        integer x               long int x;
                     17:        logical x               long int x;
                     18:        real x                  float x;
                     19:        double precision x      double x;
                     20:        complex x               struct { float r, i; } x;
                     21:        double complex x        struct { double dr, di; } x;
                     22:        character*6 x           char x[6];
                     23: .fi
                     24: 
                     25: 
                     26: The following Fortran statements calls a procedure fill() that
                     27: sets the first 10 elements of ix() to the value 20:
                     28: 
                     29: .nf
                     30:                integer ix(100)
                     31:        c
                     32:                call fill(ix, 10,  20)
                     33: .fi
                     34: 
                     35: In creating external symbols for subprogram and common block names,
                     36: f77 adds an underscore before and after external names,
                     37: while the C compiler only adds an underscore before the name.
                     38: Thus the C name fill_() corresponds to the f77 name fill();
                     39: and the corresponding C procedure is:
                     40: 
                     41: .nf
                     42:        fill_( vec, nvec, val)
                     43:        long *vec, *nvec, *val;
                     44:        {
                     45:                long nv = *nvec;
                     46:        
                     47:                while (nv-- > 0) *vec++ = *val;
                     48:        }
                     49: .fi
                     50: 
                     51: Since Fortran passes variables by address, the C procedure treats the
                     52: parameters as pointers.  This also means that a temporary must be used.
                     53: If a temporary is not used, as in:
                     54: 
                     55:        while ((*nvec)-- > 0) *vec++ = *val;
                     56: 
                     57: the value of the third parameter in the call would be destroyed.
                     58: 
                     59: When mixing C and Fortran, if I/O is done in both languages and
                     60: the main program is in C, then call 'f_init()' in the
                     61: Fortran I/O library to initialize units 0, 5, and 6 to standard error,
                     62: standard input and standard output and to line-buffer standard error.
                     63: 
                     64: C stores arrays in row-major order with subscripts starting at 0
                     65: while Fortran stores arrays in column-major order with subscripts
                     66: starting (by default) at 1.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.