---
name: "f2c"
section: "1"
platform: "linux"
package: "f2c"
version: "20240504-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/f2c"
---

# f2c(1)

Convert Fortran 77 to C or C++

## NAME

f2c - Convert Fortran 77 to C or C++

## SYNOPSIS

**f2c** \[ *option ...* \] *file ...*

## DESCRIPTION

*F2c* converts Fortran 77 source code in *files* with names ending in \`.f' or \`.F' to C (or C++) source files in the current directory, with \`.c' substituted for the final \`.f' or \`.F'. If no Fortran files are named, *f2c* reads Fortran from standard input and writes C on standard output. *File* names that end with \`.p' or \`.P' are taken to be prototype files, as produced by option \`-P', and are read first.

The following options have the same meaning as in [*f77*(1)](/f77/1.md).

- **-C**

  Compile code to check that subscripts are within declared array bounds.

- **-I2**

  Render INTEGER and LOGICAL as short, INTEGER∗4 as long int.  Assume the default *libF77* and *libI77*:  allow only INTEGER∗4 (and no LOGICAL) variables in INQUIREs.  Option \`-I4' confirms the default rendering of INTEGER as long int.

- **-I8**

  Assume 8-byte integer and logical, 4-byte REAL, 8-byte double precison and complex, and 16-byte double complex variables.  Appropriate changes to f2c.h may be needed.

- **-I***dir*

  Look for a non-absolute include file first in the directory of the current input file, then in directories specified by `-I` options (one directory per option).  Options `-I2`, `-I4`, and `-I8` have precedence, so, e.g., a directory named `2` should be specified by `-I./2` .

- **-onetrip**

  Compile DO loops that are performed at least once if reached. (Fortran 77 DO loops are not performed at all if the upper limit is smaller than the lower limit.)

- **-U**

  Honor the case of variable and external names.  Fortran keywords must be in *lower* case.

- **-u**

  Make the default type of a variable \`undefined' rather than using the default Fortran rules.

- **-w**

  Suppress all warning messages, or, if the option is \`-w66', just Fortran 66 compatibility warnings.

The following options are peculiar to *f2c*.

- **-A**

  Produce ANSI C (default, starting 20020621). For old-style C, use option `-K`.

- **-a**

  Make local variables automatic rather than static unless they appear in a DATA, EQUIVALENCE, NAMELIST, or SAVE statement.

- **-C++**

  Output C++ code.

- **-c**

  Include original Fortran source as comments.

- **-cd**

  Do not recognize cdabs, cdcos, cdexp, cdlog, cdsin, and cdsqrt as synonyms for the double complex intrinsics zabs, zcos, zexp, zlog, zsin, and zsqrt, respectively, nor dreal as a synonym for dble.

- **-cf**

  Do not report the current `.f` file except in error messages.

- **-d***dir*

  Write \`.c' files in directory *dir* instead of the current directory.

- **-E**

  Declare uninitialized COMMON to be **Extern** (overridably defined in f2c.h as **extern).**

- **-ec**

  Place uninitialized COMMON blocks in separate files: **COMMON /ABC/** appears in file **abc\_com.c**. Option \`-e1c' bundles the separate files into the output file, with comments that give an unbundling [*sed*(1)](/sed/1.md) script.

- **-ext**

  Complain about [*f77*(1)](/f77/1.md) extensions.

- **-f**

  Assume free-format input: accept text after column 72 and do not pad fixed-format lines shorter than 72 characters with blanks.

- **-72**

  Treat text appearing after column 72 as an error.

- **-g**

  Include original Fortran line numbers in `#line` lines.

- **-h**

  Emulate Fortran 66's treatment of Hollerith: try to align character strings on word (or, if the option is \`-hd', on double-word) boundaries.

- **-i2**

  Similar to **-I2**, but assume a modified *libF77* and *libI77* (compiled with **-Df2c\_i2**), so INTEGER and LOGICAL variables may be assigned by INQUIRE and array lengths are stored in short ints.

- **-i90**

  Do not recognize the Fortran 90 bit-manipulation intrinsics btest, iand, ibclr, ibits, ibset, ieor, ior, ishft, and ishftc.

- **-kr**

  Use temporary values to enforce Fortran expression evaluation where K&R (first edition) parenthesization rules allow rearrangement. If the option is \`-krd', use double precision temporaries even for single-precision operands.

- **-P**

  Write a *file***.P** of ANSI (or C++) prototypes for definitions in each input *file***.f** or *file***.F***.* When reading Fortran from standard input, write prototypes at the beginning of standard output.  Option **-Ps** implies **-P** and gives exit status 4 if rerunning *f2c* may change prototypes or declarations.

- **-p**

  Supply preprocessor definitions to make common-block members look like local variables.

- **-R**

  Do not promote REAL functions and operations to DOUBLE PRECISION. Option \`-!R' confirms the default, which imitates *f77*.

- **-r**

  Cast REAL arguments of intrinsic functions and values of REAL functions (including intrinsics) to REAL.

- **-r8**

  Promote REAL to DOUBLE PRECISION, COMPLEX to DOUBLE COMPLEX.

- **-s**

  Preserve multidimensional subscripts.  Suppressed by option \`-C' .

- **-T***dir*

  Put temporary files in directory *dir.*

- **-trapuv**

  Dynamically initialize local variables, except those appearing in SAVE or DATA statements, with values that may help find references to uninitialized variables.  For example, with IEEE arithmetic, initialize local floating-point variables to signaling NaNs.

- **-w8**

  Suppress warnings when COMMON or EQUIVALENCE forces odd-word alignment of doubles.

- **-W***n*

  Assume *n* characters/word (default 4) when initializing numeric variables with character data.

- **-z**

  Do not implicitly recognize DOUBLE COMPLEX.

- **-!bs**

  Do not recognize *b*ack*s*lash escapes (\\", \\', \\0, \\\\, \\b, \\f, \\n, \\r, \\t, \\v) in character strings.

- **-!c**

  Inhibit C output, but produce **-P** output.

- **i-!I**

  Reject **include** statements.

- **-!i8**

  Disallow INTEGER\*8 , or, if the option is \`-!i8const', permit INTEGER\*8 but do not promote integer constants to INTEGER\*8 when they involve more than 32 bits.

- **-!it**

  Don't infer types of untyped EXTERNAL procedures from use as parameters to previously defined or prototyped procedures.

- **-!P**

  Do not attempt to infer ANSI or C++ prototypes from usage.

- **-v, --version**

  Print the version number of f2c

The resulting C invokes the support routines of *f77*; object code should be loaded by *f77* or with [*ld*(1)](/ld/1.md) or [*cc*(1)](/cc/1.md) options **-lF77 -lI77 -lm**. Calling conventions are those of *f77*: see the reference below.\

## FILES

- *file***.\[fF\]**

  input file

- **\*.c**

  output file

- /usr/include/f2c.h

  header file

- /usr/lib/libf2c.a

  static link intrinsic and I/O library

- /usr/lib/libf2c\_i2.a

  static link intrinsic and I/O library for use with  files translated using the -i2 f2c option

- /usr/lib/libf2c.so

  shared object intrinsic and I/O library

- /usr/lib/libf2c\_i2.so

  shared object intrinsic and I/O library for use with files translated using the  -i2 f2c option

- S. I. Feldman and

  ## SEE ALSO

P. J. Weinberger, \`A Portable Fortran 77 Compiler', *UNIX Time Sharing System Programmer's Manual*, Tenth Edition, Volume 2, AT&T Bell Laboratories, 1990.

## DIAGNOSTICS

The diagnostics produced by *f2c* are intended to be self-explanatory.

## BUGS

Floating-point constant expressions are simplified in the floating-point arithmetic of the machine running *f2c*, so they are typically accurate to at most 16 or 17 decimal places.\
 Untypable EXTERNAL functions are declared **int**.\
 There is no notation for INTEGER\*8 constants.\
 Some intrinsic functions do not yet work with INTEGER\*8 .
