COBOLworx employee?Sign in

← Knowledge Base

GnuCOBOL

What compiler options does GnuCOBOL have?

What compiler options does GnuCOBOL 3.2 support?

Options to direct the compiler

GnuCOBOL strives to provide a COBOL compiler that follows the COBOL language standards (ISO-IEC). But those standards have changed over the years and older source code that was compliant at the time may no longer conform. Furthermore, various implementations have introduced extensions and features outside the standard. There are many billions of lines of COBOL source code and relatively little of it conforms to the current standard.

GnuCOBOL provides many options and a “Language Configuration” facility to help compile many of those various “dialects”.

That leads to a large list of compiler options offering great flexibility.

The following documentation is from the GnuCOBOL 3.2.0 man-page.

Command Line Options

-h, --help
       display this help and exit
-V, --version
       display compiler version information and exit
-dumpversion
       display compiler version and exit
-i, --info
       display compiler information (build/environment) 
       and exit
-v, --verbose
       verbose  mode,  display  additional information; 
       multiple -v options increase the verbosity, the 
       maximum is 3 as follows:  
         (1) display  compiler  version  and the commands 
             invoked by the compiler, 
         (2) pass verbose option to  assembler/compiler  
         (3) pass verbose option to linker
-q, --brief
       reduced displays, commands invoked not shown
-###   like -v but commands not executed
-x     build an executable program
-m     build a dynamically loadable module (default)
-j [<args>], --job[=<args>]
       run program after build, passing <args>
-std=<dialect>
       warnings/features  for  a  specific dialect 
       <dialect> can be one of: 
         default, cobol2014, cobol2002, cobol85, xopen, 
         ibm-strict, ibm, mvs-strict, mvs, mf-strict, mf, 
         bs2000-strict, bs2000, acu-strict, acu, rm-strict, 
         rm, gcos-strict, gcos; see  configu‐ ration 
         files in directory config
-F, --free
       use free source format (alias for -fformat=free)
--fixed
       use fixed source format (default; alias for 
       -fformat=fixed)
-O, -O2, -O3, -Os
       enable optimization
-O0    disable optimization
-g     enable C compiler debug and stack check
-d, --debug
       enable  all  run-time  error  checking,  equal  
       to -fstack-check -fec=EC-ALL
-fec=<exception-name> enable code generation for 
       <exception-name>, see --list-exceptions for the 
       possible values, sets -fsource-location
-fno-ec=<exception-name>
       disable code generation for <exception-name>
-o <file>
       place the output into <file>
-b     combine  all input files into a single dynamically 
       loadable module
-E     preprocess only; do not compile or link
-C     translation only; convert COBOL to C
-S     compile only; output assembly file
-c     compile and assemble, but do not link
-T <file>
       generate and place a wide program listing into 
       <file>
-t <file>
       generate and place a program listing into <file>
--tlines=<lines>
       specify lines per page in listing, default = 55
-P[=<dir or file>]
       generate preprocessed program listing (.lst)
-X, --Xref
       specify cross reference in listing
-I <directory>
       add <directory> to copy/include search path
-L <directory>
       add <directory> to library search path
-l <lib>
       link the library <lib>
-K <entry>
       generate CALL to <entry> as static
-D <define>
       define <define> for COBOL compilation
-A <options>
       add <options> to the C compile phase
-Q <options>
       add <options> to the C link phase
--coverage
       instrument generated binaries for coverage
--conf=<file>
       user-defined dialect configuration; see -std
--list-reserved
       display reserved words
--list-intrinsics
       display intrinsic functions
--list-mnemonics
       display mnemonic names
--list-exceptions
       display exception names
--list-system
       display system routines
--save-temps[=<dir>]
       save intermediate files * default: current
       directory
-MT <target>
       set/add target file used in dependency list
-MF <file>
       place dependency list into <file>
-ext <extension>
       add file extension for resolving COPY

Warning Options

-Wall  enable most warnings (all except as noted below)

-Wextra
       like -Wall but enable some extra warning flags

-w     disable all warnings

-Wno-<warning>
       disable warning enabled by default, -Wall or 
       -Wextra

-Wadditional
       additional warnings only raised with -Wall

-Wno-unfinished
       do not warn if unfinished features are used 
       * ALWAYS active

-Wno-pending
       do not warn if pending features are used 
       * ALWAYS active

-Wno-repository-checks
       do not warn/check for program/function/external  
       signature  mismatch 
       * ALWAYS active

-Wno-ignored-error
       do not warn about errors in code parts which are 
       unreachable and so normally ignored 
       * ALWAYS active

-Wobsolete
       warn if obsolete features are used

-Warchaic
       warn if archaic features are used

-Wredefinition
       warn about non-referenced ambiguous data items

-Wtruncate
       warn about field truncation from constant 
       assignments

-Wpossible-truncate
       warn about possible field truncation 
       * NOT set with -Wall

-Woverlap
       warn about overlapping MOVE of items

-Wpossible-overlap
       warn about MOVE of items that may overlap depending 
       on variables
       * NOT set with -Wall

-Wparentheses
       warn if parentheses are omitted around AND within OR

-Wstrict-typing
       warn strictly about type mismatch, even when same 
       size 
       * NOT set with -Wall

-Wtyping
       warn about type mismatch

-Wimplicit-define
       warn whenever data items are implicitly defined 
       * NOT set with -Wall

-Wno-corresponding
       do not warn about CORRESPONDING with no matching 
       items 
       * ALWAYS active

-Winitial-value
       warn if initial VALUE clause is ignored

-Wprototypes
       warn about missing FUNCTION prototypes/definitions

-Warithmetic-osvs
       warn if arithmetic expression precision has changed

-Wcall-params
       warn about non 01/77 items for CALL parameters 
       * NOT set with -Wall

-Wconstant-expression
       warn about expressions that always resolve to 
       true/false

-Wconstant-numlit-expression
       warn about numeric expressions that always resolve 
       to true/false

-Wlarger-01-redefines
       warn about larger redefines allowed by COBOL 
       standards

-Wcolumn-overflow
       warn  about text after program-text area, FIXED format 
       * NOT set with -Wall

-Wterminator
       warn about lack of scope terminator END-XXX 
       * NOT set with -Wall

-Wlinkage
       warn about dangling LINKAGE items 
       * NOT set with -Wall

-Wunreachable
       warn about likely unreachable statements 
       * NOT set with -Wall

-Wno-dialect
       do not warn about dialect specific issues 
       * ALWAYS active

-Wno-goto-section
       do not warn about GO TO section-name * ALWAYS active

-Wgoto-different-section
       warn about GO TO a praragraph defined in a 
       different section

-Wsuspicious-perform-thru
       warn if PERFORM THRU references procedures not in 
       ascending  order or multiple sections * ALWAYS active

-Wdangling-text
       warn about source text after program-area * NOT set 
       with -Wall

-Wno-missing-newline
       do not warn about missing newlines * ALWAYS active

-Wno-others
       do not warn about different issues * ALWAYS active

-Wno-unsupported
       do not warn if runtime does not support a feature 
       used

-fdiagnostics-plain-output
       make diagnostic output as plain as possible

-Werror
       treat all warnings as errors

-Wno-error
       don't treat warnings as errors

-Werror=<warning>
       treat specified <warning> as error

-Wno-error=<warning>
       don't treat specified <warning> as error

Compiler Options

-fsign=[ASCII|EBCDIC] define display sign representation
       * default: machine native

-ffold-copy=[UPPER|LOWER]
       fold COPY subject to value * default: no 
       transformation

-ffold-call=[UPPER|LOWER]
       fold  PROGRAM-ID,  CALL,  CANCEL  subject to value 
       * default: no transformation

-fmax-errors=<number> maximum number of errors to report 
       before compilation is aborted * default: 128

-fintrinsics=[ALL|intrinsic function name(,name,...)]
       intrinsics to be used without FUNCTION keyword

-fdump=<scope>
       dump data fields on abort, <scope> may be a 
       combination of: ALL, WS, LS, RD, FD, SC, LO

-fcallfh=<name>
       specifies  <name>  to be used for I/O as external 
       provided EXTFH interface module

-febcdic-table=<cconv-table>/<file>
       EBCDIC/ASCII translation table     
       *     e.g.     default, ebcdic500_latin1...

-fdefault-colseq=[ASCII|EBCDIC|NATIVE]
       define default collating sequence * default: NATIVE

-fstack-extended
       store origin of entrypoints and PERFORM 
       * turned on by --debug/-fdump

-fno-remove-unreachable
       disable remove of unreachable code 
       * turned off by -g

-ftrace
       generate trace code 
       * scope: executed SECTION/PARAGRAPH

-ftraceall
       generate trace code * scope:  executed  
       SECTION/PARAGRAPH/STATEMENTS

-fsyntax-only
       syntax error checking only; don't emit any output

-fdebugging-line
       enable debugging lines * 'D' in indicator 
       column or floating >>D

-fsource-location
       generate source location code 
       * turned on by  --debug/-ftraceall/-fec/-fdump

-fimplicit-init
       automatic initialization of the COBOL runtime 
       system

-fno-recursive-check
       disable check of recursive program call;  
       effectively  compiling as RECURSIVE program

-fstack-check
       PERFORM stack checking * turned on by --debug/-g

-fmemory-check=<scope>
       checks  for  invalid  writes to internal storage, 
       <scope> may be one of: all, pointer, using, none 
       * default: none, set to all by --debug

-fsection-exit-check
       check that code execution does not leave the scope 
       of SECTIONs

-fimplicit-goback-check
       check that code execution does not end implicit at 
       end of PROCEDURE DIVISION

-fwrite-after
       use AFTER 1 for WRITE of LINE SEQUENTIAL 
       * default: BEFORE 1

-fmfcomment
       '*' in column 1 treated as comment with  listing  
       suppression  
       * FIXED/COBOL85/VARIABLE format only

-facucomment
       '$' in indicator  area treated as '*', '|' 
       treated as floating comment

-fno-trunc
       allow numeric field overflow * non-ANSI behaviour

-fsingle-quote
       use a single quote (apostrophe) for QUOTE  
       *  default: double quote

-foptional-file
       treat all files as OPTIONAL * unless NOT OPTIONAL 
       specified

-fstatic-call
       output static function calls for the CALL 
       statement

-fno-gen-c-decl-static-call
       disable generation of C function declarations 
       for subroutines with static CALL

-fgen-c-line-directives
       generate source location directives in C code; 
       * turned on by -g/--coverage

-fgen-c-labels
       generate extra labels in C sources; * turned on 
       by -g

-fno-theaders
       suppress all headers from listing while keeping 
       page breaks

-fno-tsource
       suppress source from listing

-fno-tmessages
       suppress warning and error summary from listing

-ftsymbols
       specify symbols in listing

-ftcmd specify command line in listing

-fno-ttimestamp
       suppress timestamp in listing headers

-fttitle=<title>
       set listing title with '_' replaced by spaces; 
       defaults to package name and version

-fno-diagnostics-show-option
       suppress output of option that directly controls 
       the diagnostic

-fno-diagnostics-show-caret
       do not display source context on warning/error 
       diagnostic

-fno-diagnostics-show-line-numbers
       suppress display of line numbers in diagnostics

   Compiler dialect configuration options:
-freserved-words=<value>
       use of complete/fixed reserved words

-ftab-width=1..12
       number of spaces that are assumed for tabs

-ftext-column=72..255
       right margin column number for fixed-form 
       reference-format

-fpic-length=<number>
       maximum number of characters  allowed  in  the  
       PICTURE  character-string

-fword-length=1..63
       maximum word-length for COBOL (= programmer 
       defined) words

-fliteral-length=<number>
       maximum literal size in general

-fnumeric-literal-length=1..38
       maximum numeric literal size

-fdefaultbyte=<value>
       default initialization for fields without VALUE, 
       may be one of:
       * character in quotes 
       * decimal 0..255 representing a character  
       * "init" to initialize to PICTURE/USAGE 
       * "none" to do no explicit initialization 
       * default: "init"

-fformat=<value>
       default reference-format, may be one of: FIXED,  
       FREE,  COBOL85, VARIABLE, XOPEN, XCARD, CRT, 
       TERMINAL, COBOLX

-fbinary-size=<value>
       binary byte size - defines the allocated bytes 
       according to PIC, may be one of: 2-4-8, 1-2-4-8, 
       1--8

-fbinary-byteorder=<value>
       binary byte order, may be one of: native, big-endian

-fassign-clause=<value>
       how to interpret 'ASSIGN word': as  'ASSIGN  
       EXTERNAL  word'  or 'ASSIGN  DYNAMIC word', may 
       be one of: dynamic, external, ibm (= external), 
       mf (= dynamic)

-fscreen-section-rules=<value>
       which compiler's rules to apply to SCREEN SECTION item  
       clauses, may be one of: acu, gc, mf, rm, std, xopen

-fdpc-in-data=<value>
       whether  DECIMAL-POINT IS COMMA has effect in 
       XML/JSON GENERATE, may be one of: none, xml, json, 
       all

-fsubscript-check=<value>
       checking for subscript (only done  with  
       EC-BOUND-SUBSCRIPT  active), may be one of: full, 
       max, record

-ffilename-mapping
       resolve file names at run time using environment 
       variables

-fpretty-display
       alternate formatting of numeric fields

-fbinary-truncate
       numeric truncation according to ANSI

-fcomplex-odo
       allow non-standard OCCURS DEPENDING ON syntax

-fodoslide
       adjust items following OCCURS DEPENDING (implies 
       complex-odo)

-finit-justify
       applies JUSTIFY with VALUE clause

-findirect-redefines
       allow REDEFINES to other than last equal level 
       number

-frelax-syntax-checks
       allow certain syntax variations (e.g. REDEFINES 
       position)

-fref-mod-zero-length
       allow zero length reference-modification (only  
       changed with EC-BOUND-REF-MOD active)

-frelax-level-hierarchy
       allow non-matching level numbers

-fselect-working
       require ASSIGN USING items to be in WORKING-STORAGE

-flocal-implies-recursive
       LOCAL-STORAGE SECTION implies RECURSIVE attribute

-fsticky-linkage
       LINKAGE SECTION items remain allocated between 
       invocations

-fmove-ibm
       MOVE operates as on IBM (left to right, byte by 
       byte)

-fperform-osvs
       exit point of any currently executing perform is  
       recognized  if reached

-farithmetic-osvs
       limit  precision  in  intermediate results to 
       precision of final result (less accurate)

-fconstant-folding
       evaluate constant expressions at compile time

-fhostsign
       allow hexadecimal value 'F' for NUMERIC test  of  
       signed PACKED DECIMAL field

-fprogram-name-redefinition
       program names don't lead to a reserved identifier

-faccept-update
       set WITH UPDATE clause as default for ACCEPT 
       dest-item, instead of WITH NO UPDATE

-faccept-auto
       set WITH AUTO clause as default for ACCEPT dest-item, 
       instead of WITH TAB

-fconsole-is-crt
       assume CONSOLE IS CRT if not set otherwise

-fno-echo-means-secure
       NO-ECHO hides input with asterisks like SECURE

-fline-col-zero-default
       assume a field DISPLAY starts at LINE 0 COL 0 (i.e. 
       at the cursor), not LINE 1 COL 1

-fdisplay-special-fig-consts
       special behaviour of DISPLAY SPACE/ALL X'01'/ALL 
       X'02'/ALL X'07'

-fbinary-comp-1
       COMP-1 is a 16-bit signed integer

-fnumeric-pointer
       POINTER is a 64-bit unsigned integer

-fmove-non-numeric-lit-to-numeric-is-zero
       imply zero in move of non-numeric literal to numeric 
       items

-fimplicit-assign-dynamic-var implicitly define a variable 
       if an ASSIGN DYNAMIC does not match any data item

-fdevice-mnemonics
       specifying device by mnemonic

-fxml-parse-xmlss
       XML PARSE XMLSS

-fareacheck
       check  contents of Area A (when reference format 
       supports Area A enforcement), enabled checks include: 
       * division, section, paragraph names, level indicators 
         (FD, SD, RD, and CD), and toplevel numbers (01 and 
         77) must start in Area A;
       * statements must not start in Area A; and 
       * separator periods must not be within Area A

-fcomment-paragraphs=<support>
       comment paragraphs in IDENTIFICATION DIVISION
       (AUTHOR, DATE-WRITTEN, ...)

-fcontrol-division=<support>
       CONTROL DIVISION

-fpartial-replace-when-literal-src=<support>
       apply partial replacing with literal source operand 
       even when it replaces with spaces only; * "skip" 
       prevents such replacements

-fmemory-size-clause=<support>
       MEMORY-SIZE clause

-fmultiple-file-tape-clause=<support> MULTIPLE-FILE-TAPE 
       clause

-flabel-records-clause=<support>
       LABEL-RECORDS clause

-fvalue-of-clause=<support>
       VALUE-OF clause

-fdata-records-clause=<support>
       DATA-RECORDS clause

-ftop-level-occurs-clause=<support>
       OCCURS clause on top-level

-fsame-as-clause=<support>
       SAME AS clause

-ftype-to-clause=<support>
       TYPE TO clause

-fusage-type=<support>
       USAGE type-name

-fsynchronized-clause=<support>
       SYNCHRONIZED clause

-fsync-left-right=<support>
       LEFT/RIGHT phrases in SYNCHRONIZED clause

-fspecial-names-clause=<support>
       SPECIAL-NAMES clause

-fgoto-statement-without-name=<support>
       GO TO statement without name

-fstop-literal-statement=<support>
       STOP-literal statement

-fstop-identifier-statement=<support> STOP-identifier 
       statement

-fstop-error-statement=<support>
       STOP ERROR statement

-fdebugging-mode=<support>
       DEBUGGING MODE and debugging indicator

-fuse-for-debugging=<support> USE FOR DEBUGGING

-fpadding-character-clause=<support>
       PADDING CHARACTER clause

-fnext-sentence-phrase=<support>
       NEXT SENTENCE phrase

-flisting-statements=<support>
       listing-directive statements EJECT, SKIP1, SKIP2, 
       SKIP3

-ftitle-statement=<support>
       listing-directive statement TITLE

-fentry-statement=<support>
       ENTRY statement

-fmove-noninteger-to-alphanumeric=<support>
       move noninteger to alphanumeric

-fmove-figurative-constant-to-numeric=<support>
       move figurative constants to numeric

-fmove-figurative-space-to-numeric=<support>
       move figurative constant SPACE to numeric

-fmove-figurative-quote-to-numeric=<support>
       move figurative constant QUOTE to numeric

-fodo-without-to=<support>
       OCCURS DEPENDING ON without to

-fsection-segments=<support>
       section segments

-falter-statement=<support>
       ALTER statement

-fcall-overflow=<support>
       OVERFLOW clause for CALL

-fnumeric-boolean=<support>
       boolean literals (B'1010')

-fhexadecimal-boolean=<support>
       hexadecimal-boolean literals (BX'A')

-fnational-literals=<support> national literals 
       (N'UTF-16 string')

-fhexadecimal-national-literals=<support>
       hexadecimal-national literals (NX'265E')

-fnational-character-literals=<support>
       non-standard national literals (NC'UTF-16 string')

-fhp-octal-literals=<support> HP COBOL octal literals 
       (%377)

-facu-literals=<support>
       ACUCOBOL-GT literals (#B #O #H #X)

-febcdic-symbolic-characters
       EBCDIC symbolic characters in literals 
       ("  "135,151,151"bar"195, 194"Z" for " foobarBAZ")

-fword-continuation=<support> continuation of COBOL words

-fnot-exception-before-exception=<support>
       NOT ON EXCEPTION before ON EXCEPTION

-faccept-display-extensions=<support> extensions to ACCEPT 
       and DISPLAY

-frenames-uncommon-levels=<support>
       RENAMES of 01-, 66- and 77-level items

-flarger-redefines=<support>
       allow larger REDEFINES items

-fsymbolic-constant=<support> constants defined in 
       SPECIAL-NAMES

-fconstant-78=<support>
       constant  with level 78 item (note: has left to right 
       precedence in expressions)

-fconstant-01=<support>
       constant with level 01 CONSTANT AS/FROM item

-fperform-varying-without-by=<support>
       PERFORM VARYING without BY phrase (implies BY 1)

-freference-out-of-declaratives=<support>
       references to sections not in DECLARATIVES from within  
       DECLARATIVES

-fprogram-prototypes=<support>
       CALL/CANCEL with program-prototype-name

-fcall-convention-mnemonic=<support>
       specifying call-convention by mnemonic

-fcall-convention-linkage=<support>
       specifying call-convention by WITH ... LINKAGE

-fusing-optional=<support>
       support for PROCEDURE DIVISION USING OPTIONAL

-fnumeric-value-for-edited-item=<support>
       numeric literals in VALUE clause of numeric-edited 
       items

-fincorrect-conf-sec-order=<support>
       incorrect order of CONFIGURATION SECTION paragraphs

-fdefine-constant-directive=<support>  allow  >> DEFINE 
       CONSTANT var AS literal

-ffree-redefines-position=<support>
       REDEFINES clause not following entry-name in definition

-frecords-mismatch-record-clause=<support>
       record sizes does not match RECORD clause

-frecord-delimiter=<support>
       RECORD DELIMITER clause

-fsequential-delimiters=<support>
       BINARY-SEQUENTIAL and LINE-SEQUENTIAL phrases in  
       RECORD  DELIMITER

-frecord-delim-with-fixed-recs=<support>
       RECORD DELIMITER clause on file with fixed-length 
       records

-fmissing-statement=<support>  missing  statement (e.g. 
       empty IF / PERFORM)

-fmissing-period=<support>
       missing period in PROCEDURE DIVISION (when reference 
       format supports Area A enforcement)

-fzero-length-literals=<support>
       zero-length literals, e.g. '' and ""

-fxml-generate-extra-phrases=<support>
       XML GENERATE's phrases other than COUNT IN

-fcontinue-after=<support>
       AFTER phrase in CONTINUE statement

-fgoto-entry=<support>
       ENTRY FOR GO TO and GO TO ENTRY statements

-fassign-variable=<support>
       ASSIGN [TO] variable in SELECT

-fassign-using-variable=<support>
       ASSIGN USING/VARYING variable in SELECT

-fassign-ext-dyn=<support>
       ASSIGN EXTERNAL/DYNAMIC in SELECT

-fassign-disk-from=<support>
       ASSIGN DISK FROM variable in SELECT

-fvsam-status=<support>
       VSAM status in FILE STATUS

-fself-call-recursive=<support>
       CALL to own PROGRAM-ID implies RECURSIVE attribute

-frecord-contains-depending-clause=<support>
       DEPENDING clause in RECORD CONTAINS

-fpicture-l=<support>
       PICTURE string with 'L' character

       where  <support>  is one of the following: 'ok', 
       'warning', 'ar‐ chaic', 'obsolete', 'skip', 'ignore', 
       'error', 'unconformable'

-fnot-reserved=<word>
       word to be taken out of the reserved words list

-freserved=<word>
       word to be added to reserved words list

-freserved=<word>:<alias>
       word to be added to reserved words list as alias

-fnot-register=<word>
       special register to disable

-fregister=<word> or <word>:<definition>, where definition  
       uses  back‐ slash escape special register to enable