Copyright (C) 2000-2012 |
GNU Info (g77-295.info)Main Program UnitMain Program Unit (PROGRAM) =========================== When `g77' compiles a main program unit, it gives it the public procedure name `MAIN__'. The `libg2c' library has the actual `main()' procedure as is typical of C-based environments, and it is this procedure that performs some initial start-up activity and then calls `MAIN__'. Generally, `g77' and `libg2c' are designed so that you need not include a main program unit written in Fortran in your program--it can be written in C or some other language. Especially for I/O handling, this is the case, although `g77' version 0.5.16 includes a bug fix for `libg2c' that solved a problem with using the `OPEN' statement as the first Fortran I/O activity in a program without a Fortran main program unit. However, if you don't intend to use `g77' (or `f2c') to compile your main program unit--that is, if you intend to compile a `main()' procedure using some other language--you should carefully examine the code for `main()' in `libg2c', found in the source file `egcs/libf2c/libF77/main.c', to see what kinds of things might need to be done by your `main()' in order to provide the Fortran environment your Fortran code is expecting. For example, `libg2c''s `main()' sets up the information used by the `IARGC' and `GETARG' intrinsics. Bypassing `libg2c''s `main()' without providing a substitute for this activity would mean that invoking `IARGC' and `GETARG' would produce undefined results. When debugging, one implication of the fact that `main()', which is the place where the debugged program "starts" from the debugger's point of view, is in `libg2c' is that you won't be starting your Fortran program at a point you recognize as your Fortran code. The standard way to get around this problem is to set a break point (a one-time, or temporary, break point will do) at the entrance to `MAIN__', and then run the program. A convenient way to do so is to add the `gdb' command tbreak MAIN__ to the file `.gdbinit' in the directory in which you're debugging (using `gdb'). After doing this, the debugger will see the current execution point of the program as at the beginning of the main program unit of your program. Of course, if you really want to set a break point at some other place in your program and just start the program running, without first breaking at `MAIN__', that should work fine. automatically generated by info2www version 1.2.2.9 |