c99 man page on YellowDog

Man page or keyword search:  
man Server   18644 pages
apropos Keyword Search (all sections)
Output format
YellowDog logo
[printable version]

C99(P)			   POSIX Programmer's Manual			C99(P)

NAME
       c99 - compile standard C programs

SYNOPSIS
       c99 [-c][-D name[=value]]...[-E][-g][-I directory] ... [-L directory]
	      ... [-o outfile][-Ooptlevel][-s][-U name]...  operand ...

DESCRIPTION
       The  c99	 utility is an interface to the standard C compilation system;
       it shall accept source code conforming to the ISO C standard. The  sys‐
       tem conceptually consists of a compiler and link editor. The files ref‐
       erenced by operands shall be compiled and linked	 to  produce  an  exe‐
       cutable	file.  (It  is unspecified whether the linking occurs entirely
       within the operation of c99; some implementations may  produce  objects
       that are not fully resolved until the file is executed.)

       If  the	-c  option is specified, for all pathname operands of the form
       file .c, the files:

	      $(basename pathname .c).o

       shall be created as the result of successful  compilation.  If  the  -c
       option  is  not	specified, it is unspecified whether such .o files are
       created or deleted for the file .c operands.

       If there are no options that prevent link editing (such as -c  or  -E),
       and  all	 operands  compile  and link without error, the resulting exe‐
       cutable file shall be written according to the -o  outfile  option  (if
       present) or to the file a.out.

       The  executable file shall be created as specified in File Read, Write,
       and Creation , except that the file permission bits shall be set to:

	      S_IRWXO | S_IRWXG | S_IRWXU

       and the bits specified by the umask of the process shall be cleared.

OPTIONS
       The c99 utility	shall  conform	to  the	 Base  Definitions  volume  of
       IEEE Std 1003.1-2001,  Section  12.2, Utility Syntax Guidelines, except
       that:

	* The -l library operands have the format of options, but their	 posi‐
	  tion	within a list of operands affects the order in which libraries
	  are searched.

	* The order of specifying the -I and -L options is significant.

	* Conforming applications shall specify each option  separately;  that
	  is,  grouping	 option	 letters (for example, -cO) need not be recog‐
	  nized by all implementations.

       The following options shall be supported:

       -c     Suppress the link-edit phase of  the  compilation,  and  do  not
	      remove any object files that are produced.

       -g     Produce  symbolic information in the object or executable files;
	      the nature of this information is unspecified, and may be	 modi‐
	      fied by implementation-defined interactions with other options.

       -s     Produce object or executable files, or both, from which symbolic
	      and other information not required for  proper  execution	 using
	      the  exec	 family	 defined  in  the  System Interfaces volume of
	      IEEE Std 1003.1-2001 has been removed (stripped). If both -g and
	      -s options are present, the action taken is unspecified.

       -o  outfile
	      Use  the pathname outfile, instead of the default a.out, for the
	      executable file produced. If the -o option is present with -c or
	      -E, the result is unspecified.

       -D  name[=value]

	      Define  name  as	if  by a C-language #define directive. If no =
	      value is given, a value of 1 shall be used. The  -D  option  has
	      lower precedence than the -U option. That is, if name is used in
	      both a -U and a -D option, name shall be undefined regardless of
	      the  order  of  the  options.  Additional implementation-defined
	      names may be provided by	the  compiler.	Implementations	 shall
	      support at least 2048 bytes of -D definitions and 256 names.

       -E     Copy  C-language	source files to standard output, expanding all
	      preprocessor directives; no compilation shall be	performed.  If
	      any operand is not a text file, the effects are unspecified.

       -I  directory
	      Change  the  algorithm for searching for headers whose names are
	      not absolute pathnames to look in the  directory	named  by  the
	      directory	 pathname  before  looking  in the usual places. Thus,
	      headers whose names are enclosed in double-quotes ( ""  )	 shall
	      be  searched  for	 first	in  the directory of the file with the
	      #include line, then in directories named in -I options, and last
	      in  the  usual  places.  For headers whose names are enclosed in
	      angle brackets ( "<>" ), the header shall be searched  for  only
	      in directories named in -I options and then in the usual places.
	      Directories named in -I options shall be searched in  the	 order
	      specified.  Implementations shall support at least ten instances
	      of this option in a single c99 command invocation.

       -L  directory
	      Change the algorithm of searching for the libraries named in the
	      -l objects to look in the directory named by the directory path‐
	      name before looking in the usual places. Directories named in -L
	      options  shall  be  searched in the order specified. Implementa‐
	      tions shall support at least ten instances of this option	 in  a
	      single  c99 command invocation. If a directory specified by a -L
	      option contains files named libc.a, libm.a, libl.a,  or  liby.a,
	      the results are unspecified.

       -O  optlevel
	      Specify  the level of code optimization. If the optlevel option-
	      argument is the digit '0' , all special code optimizations shall
	      be  disabled.  If	 it is the digit '1' , the nature of the opti‐
	      mization is unspecified. If the -O option is omitted, the nature
	      of  the  system's	 default  optimization	is  unspecified. It is
	      unspecified whether code generated in the presence of the	 -O  0
	      option  is  the same as that generated when -O is omitted. Other
	      optlevel values may be supported.

       -U  name
	      Remove any initial definition of name.

       Multiple instances of the -D, -I, -U, and -L options can be specified.

OPERANDS
       An operand is either in the form of a pathname or the form -l  library.
       The  application shall ensure that at least one operand of the pathname
       form is specified. The following operands shall be supported:

       file.c A C-language source file to be compiled and  optionally  linked.
	      The application shall ensure that the operand is of this form if
	      the -c option is used.

       file.a A library of object files typically produced by the ar  utility,
	      and passed directly to the link editor. Implementations may rec‐
	      ognize implementation-defined suffixes other than .a as denoting
	      object file libraries.

       file.o An  object  file	produced  by c99 -c and passed directly to the
	      link  editor.  Implementations  may  recognize   implementation-
	      defined suffixes other than .o as denoting object files.

       The processing of other files is implementation-defined.

       -l library
	      (The letter ell.) Search the library named:

	      liblibrary.a

       A library shall be searched when its name is encountered, so the place‐
       ment of a -l operand is significant. Several standard libraries can  be
       specified in this manner, as described in the EXTENDED DESCRIPTION sec‐
       tion. Implementations  may  recognize  implementation-defined  suffixes
       other than .a as denoting libraries.

STDIN
       Not used.

INPUT FILES
       The  input file shall be one of the following: a text file containing a
       C-language source program, an object file in the format produced by c99
       -c,  or	a library of object files, in the format produced by archiving
       zero or more object files, using ar. Implementations may	 supply	 addi‐
       tional  utilities that produce files in these formats. Additional input
       file formats are implementation-defined.

ENVIRONMENT VARIABLES
       The following environment variables shall affect the execution of c99:

       LANG   Provide a default value for the  internationalization  variables
	      that  are	 unset	or  null.  (See the Base Definitions volume of
	      IEEE Std 1003.1-2001, Section  8.2,  Internationalization	 Vari‐
	      ables  for the precedence of internationalization variables used
	      to determine the values of locale categories.)

       LC_ALL If set to a non-empty string value, override the values  of  all
	      the other internationalization variables.

       LC_CTYPE
	      Determine	 the  locale  for  the	interpretation of sequences of
	      bytes of text data as characters (for  example,  single-byte  as
	      opposed to multi-byte characters in arguments and input files).

       LC_MESSAGES
	      Determine	 the  locale  that should be used to affect the format
	      and contents of diagnostic messages written to standard error.

       NLSPATH
	      Determine the location of message catalogs for the processing of
	      LC_MESSAGES .

       TMPDIR Provide  a  pathname  that should override the default directory
	      for temporary files, if any.    On XSI-conforming systems,  pro‐
	      vide  a  pathname	 that shall override the default directory for
	      temporary files, if any.

ASYNCHRONOUS EVENTS
       Default.

STDOUT
       If more than one file operand ending in .c (or possibly other  unspeci‐
       fied suffixes) is given, for each such file:

	      "%s:\n", <file>

       may  be written. These messages, if written, shall precede the process‐
       ing of each input file; they shall not be written to the standard  out‐
       put  if	they  are  written  to the standard error, as described in the
       STDERR section.

       If the -E option is specified, the standard output shall be a text file
       that represents the results of the preprocessing stage of the language;
       it may contain extra information appropriate for subsequent compilation
       passes.

STDERR
       The  standard error shall be used only for diagnostic messages. If more
       than one file operand ending in .c (or possibly other unspecified  suf‐
       fixes) is given, for each such file:

	      "%s:\n", <file>

       may  be	written	 to allow identification of the diagnostic and warning
       messages with the appropriate input file. These messages,  if  written,
       shall  precede  the  processing	of  each input file; they shall not be
       written to the standard error if they are written to the standard  out‐
       put, as described in the STDOUT section.

       This utility may produce warning messages about certain conditions that
       do not warrant returning an error (non-zero) exit value.

OUTPUT FILES
       Object files or executable files or both are  produced  in  unspecified
       formats.

EXTENDED DESCRIPTION
   Standard Libraries
       The  c99 utility shall recognize the following -l operands for standard
       libraries:

       -l c   This operand shall make visible all functions referenced in  the
	      System  Interfaces volume of IEEE Std 1003.1-2001, with the pos‐
	      sible  exception	of  those  functions  listed  as  residing  in
	      <aio.h>,	 <arpa/inet.h>,	  <complex.h>,	 <fenv.h>,   <math.h>,
	      <mqueue.h>, <netdb.h>, <netinet/in.h>,  <pthread.h>,  <sched.h>,
	      <semaphore.h>,  <spawn.h>,  <sys/socket.h>,  pthread_kill(), and
	      pthread_sigmask() in <signal.h>, <trace.h>, functions marked  as
	      extensions  other	 than  as  part of the MF or MPR extensions in
	      <sys/mman.h>, functions marked as ADV in	<fcntl.h>,  and	 func‐
	      tions marked as CS, CPT, and TMR in <time.h>. This operand shall
	      not be required to be present to cause a search of this library.

       -l l   This operand shall make visible all functions required by the C-
	      language	output	of lex that are not made available through the
	      -l c operand.

       -l pthread
	      This operand shall make  visible	all  functions	referenced  in
	      <pthread.h>  and pthread_kill() and pthread_sigmask() referenced
	      in <signal.h>. An implementation may search this library in  the
	      absence of this operand.

       -l m   This  operand  shall  make  visible  all functions referenced in
	      <math.h>,	 <complex.h>,  and  <fenv.h>.  An  implementation  may
	      search this library in the absence of this operand.

       -l rt  This  operand  shall  make  visible  all functions referenced in
	      <aio.h>, <mqueue.h>, <sched.h>,  <semaphore.h>,  and  <spawn.h>,
	      functions	 marked	 as extensions other than as part of the MF or
	      MPR extensions in	 <sys/mman.h>,	functions  marked  as  ADV  in
	      <fcntl.h>, and functions marked as CS, CPT, and TMR in <time.h>.
	      An implementation may search this library in the absence of this
	      operand.

       -l trace
	      This  operand  shall  make  visible  all functions referenced in
	      <trace.h>.  An implementation may search	this  library  in  the
	      absence of this operand.

       -l xnet
	      This   operand   makes   visible	all  functions	referenced  in
	      <arpa/inet.h>, <netdb.h>, <netinet/in.h>, and <sys/socket.h>. An
	      implementation  may  search  this library in the absence of this
	      operand.

       -l y   This operand shall make visible all functions required by the C-
	      language	output of yacc that are not made available through the
	      -l c operand.

       In the absence of options that inhibit invocation of the	 link  editor,
       such  as -c or -E, the c99 utility shall cause the equivalent of a -l c
       operand to be passed to the link editor as the last -l operand, causing
       it  to  be  searched  after  all	 other	object files and libraries are
       loaded.

       It is  unspecified  whether  the	 libraries  libc.a,  libm.a,  librt.a,
       libpthread.a,  libl.a, liby.a, or libxnet.a exist as regular files. The
       implementation may accept as -l operands names of objects that  do  not
       exist as regular files.

   External Symbols
       The C compiler and link editor shall support the significance of exter‐
       nal symbols up to a length of at least 31 bytes; the action taken  upon
       encountering  symbols exceeding the implementation-defined maximum sym‐
       bol length is unspecified.

       The compiler and link editor shall support a minimum  of	 511  external
       symbols	per source or object file, and a minimum of 4095 external sym‐
       bols in total. A diagnostic message shall be written  to	 the  standard
       output  if  the implementation-defined limit is exceeded; other actions
       are unspecified.

   Programming Environments
       All implementations shall support  one  of  the	following  programming
       environments as a default. Implementations may support more than one of
       the following programming environments. Applications can use  sysconf()
       or getconf to determine which programming environments are supported.

		     Table: Programming Environments: Type Sizes

	     Programming Environment  Bits in  Bits in	Bits in	 Bits in
	     getconf Name	      int      long	pointer	 off_t
	     _POSIX_V6_ILP32_OFF32    32       32	32	 32
	     _POSIX_V6_ILP32_OFFBIG   32       32	32	 >=64
	     _POSIX_V6_LP64_OFF64     32       64	64	 64
	     _POSIX_V6_LPBIG_OFFBIG   >=32     >=64	>=64	 >=64

       All  implementations  shall  support one or more environments where the
       widths of the following types are no greater than  the  width  of  type
       long:  blksize_t,  cc_t,	 mode_t,  nfds_t,  pid_t,  ptrdiff_t,  size_t,
       speed_t, ssize_t, suseconds_t, tcflag_t, useconds_t, wchar_t, wint_t

       The executable files created when these environments are selected shall
       be  in  a  proper format for execution by the exec family of functions.
       Each environment may be one of the ones	in  Programming	 Environments:
       Type  Sizes , or it may be another environment. The names for the envi‐
       ronments that meet this requirement shall be output by a	 getconf  com‐
       mand  using  the _POSIX_V6_WIDTH_RESTRICTED_ENVS argument. If more than
       one environment meets the requirement, the names of all	such  environ‐
       ments shall be output on separate lines. Any of these names can then be
       used in a subsequent getconf command to obtain the  flags  specific  to
       that environment with the following suffixes added as appropriate:

       _CFLAGS
	      To get the C compiler flags.

       _LDFLAGS
	      To get the linker/loader flags.

       _LIBS  To get the libraries.

       This requirement may be removed in a future version of IEEE Std 1003.1.

       When this utility processes a file containing a function called main(),
       it shall be defined with a return type equivalent to int. Using	return
       from  the  initial  call to main() shall be equivalent (other than with
       respect to language scope issues) to calling exit() with	 the  returned
       value.  Reaching the end of the initial call to main() shall be equiva‐
       lent to calling exit(0). The implementation shall not declare a	proto‐
       type for this function.

       Implementations	provide	 configuration	strings	 for C compiler flags,
       linker/loader flags, and libraries for each supported environment. When
       an  application	needs to use a specific programming environment rather
       than the implementation default programming environment	while  compil‐
       ing,  the  application  shall first verify that the implementation sup‐
       ports the desired environment. If the desired  programming  environment
       is  supported, the application shall then invoke c99 with the appropri‐
       ate C compiler flags as the first options for the compile,  the	appro‐
       priate linker/loader flags after any other options but before any oper‐
       ands, and the appropriate libraries at the end of the operands.

       Conforming applications shall not attempt to link together object files
       compiled	 for  different programming models. Applications shall also be
       aware that binary data placed in shared memory or in files might not be
       recognized by applications built for other programming models.

		Table: Programming Environments: c99 and cc Arguments

      Programming Environment			  c99 and cc Arguments
      getconf Name	      Use		  getconf Name
      _POSIX_V6_ILP32_OFF32   C Compiler Flags	  POSIX_V6_ILP32_OFF32_CFLAGS
			      Linker/Loader Flags POSIX_V6_ILP32_OFF32_LDFLAGS
			      Libraries		  POSIX_V6_ILP32_OFF32_LIBS
      _POSIX_V6_ILP32_OFFBIG  C Compiler Flags	  POSIX_V6_ILP32_OFFBIG_CFLAGS
			      Linker/Loader Flags POSIX_V6_ILP32_OFFBIG_LDFLAGS
			      Libraries		  POSIX_V6_ILP32_OFFBIG_LIBS
      _POSIX_V6_LP64_OFF64    C Compiler Flags	  POSIX_V6_LP64_OFF64_CFLAGS
			      Linker/Loader Flags POSIX_V6_LP64_OFF64_LDFLAGS
			      Libraries		  POSIX_V6_LP64_OFF64_LIBS
      _POSIX_V6_LPBIG_OFFBIG  C Compiler Flags	  POSIX_V6_LPBIG_OFFBIG_CFLAGS
			      Linker/Loader Flags POSIX_V6_LPBIG_OFFBIG_LDFLAGS
			      Libraries		  POSIX_V6_LPBIG_OFFBIG_LIBS

EXIT STATUS
       The following exit values shall be returned:

	0     Successful compilation or link edit.

       >0     An error occurred.

CONSEQUENCES OF ERRORS
       When  c99 encounters a compilation error that causes an object file not
       to be created, it shall write a diagnostic to standard error  and  con‐
       tinue  to  compile other source code operands, but it shall not perform
       the link phase and return a non-zero exit status. If the link  edit  is
       unsuccessful,  a	 diagnostic message shall be written to standard error
       and c99 exits with a non-zero status. A	conforming  application	 shall
       rely on the exit status of c99, rather than on the existence or mode of
       the executable file.

       The following sections are informative.

APPLICATION USAGE
       Since the c99 utility usually creates files in  the  current  directory
       during  the  compilation	 process, it is typically necessary to run the
       c99 utility in a directory in which a file can be created.

       On systems providing POSIX Conformance (see the Base Definitions volume
       of  IEEE Std 1003.1-2001, Chapter 2, Conformance), c99 is required only
       with the C-Language Development option; XSI-conformant  systems	always
       provide c99.

       Some  historical	 implementations  have created .o files when -c is not
       specified and more than one source file is given. Since	this  area  is
       left  unspecified,  the	application cannot rely on .o files being cre‐
       ated, but it also must be  prepared  for	 any  related  .o  files  that
       already exist being deleted at the completion of the link edit.

       Some  historical implementations have permitted -L options to be inter‐
       spersed with -l operands on the command line.  For  an  application  to
       compile	consistently  on  systems  that do not behave like this, it is
       necessary for a conforming application to supply all -L options	before
       any of the -l options.

       There  is  the possible implication that if a user supplies versions of
       the standard functions (before they would be encountered by an implicit
       -l c  or	 explicit -l m), that those versions would be used in place of
       the standard versions.  There are various reasons  this	might  not  be
       true  (functions defined as macros, manipulations for clean name space,
       and so on), so the existence of files named in the same manner  as  the
       standard	 libraries  within  the -L directories is explicitly stated to
       produce unspecified behavior.

       All of the functions specified  in  the	System	Interfaces  volume  of
       IEEE Std 1003.1-2001  may  be  made visible by implementations when the
       Standard C Library is searched. Conforming applications must explicitly
       request searching the other standard libraries when functions made vis‐
       ible by those libraries are used.

EXAMPLES
	1. The following usage example compiles foo.c  and  creates  the  exe‐
	   cutable file foo:

	   c99 -o foo foo.c

       The  following usage example compiles foo.c and creates the object file
       foo.o:

	      c99 -c foo.c

       The following usage example compiles foo.c and creates  the  executable
       file a.out:

	      c99 foo.c

       The  following  usage  example compiles foo.c, links it with bar.o, and
       creates the executable file a.out. It may also create and leave foo.o:

	      c99 foo.c bar.o

	2. The following example shows how an application using threads inter‐
	   faces  can  test  for  support of and use a programming environment
	   supporting 32-bit int, long, and pointer types and  an  off_t  type
	   using at least 64 bits:

	   if [ $(getconf _POSIX_V6_ILP32_OFFBIG) != "-1" ]
	   then
	       c99 $(getconf POSIX_V6_ILP32_OFFBIG_CFLAGS) -D_XOPEN_SOURCE=600 \
		   $(getconf POSIX_V6_ILP32_OFFBIG_LDFLAGS) foo.c -o foo \
		   $(getconf POSIX_V6_ILP32_OFFBIG_LIBS) -l pthread
	   else
	       echo ILP32_OFFBIG programming environment not supported
	       exit 1
	   fi

	3. The	following  examples  clarify  the  use	and interactions of -L
	   options and -l operands.

       Consider the case in which module a.c calls  function  f()  in  library
       libQ.a,	and  module  b.c  calls function g() in library libp.a. Assume
       that both libraries reside in /a/b/c. The command line to  compile  and
       link in the desired way is:

	      c99 -L /a/b/c main.o a.c -l Q b.c -l p

       In this case the -l Q operand need only precede the first -l p operand,
       since both libQ.a and libp.a reside in the same directory.

       Multiple -L operands can be used when library  name  collisions	occur.
       Building	 on the previous example, suppose that the user wants to use a
       new libp.a, in /a/a/a, but still wants f() from /a/b/c/libQ.a:

	      c99 -L /a/a/a -L /a/b/c main.o a.c -l Q b.c -l p

       In this example, the linker searches the -L options in the order speci‐
       fied,  and finds /a/a/a/libp.a before /a/b/c/libp.a when resolving ref‐
       erences for b.c. The order of the -l operands is still important,  how‐
       ever.

	4. The	following  example shows how an application can use a program‐
	   ming environment where the widths  of  the  following  types:  blk‐
	   size_t,  cc_t,  mode_t,  nfds_t, pid_t, ptrdiff_t, size_t, speed_t,
	   ssize_t, suseconds_t, tcflag_t, useconds_t, wchar_t, wint_t

       are no greater than the width of type long:

	      # First choose one of the listed environments ...

	      # ... if there are no additional constraints, the first one will do:
	      CENV=$(getconf _POSIX_V6_WIDTH_RESTRICTED_ENVS | head -n l)

	      # ... or, if an environment that supports large files is preferred,
	      # look for names that contain "OFF64" or "OFFBIG". (This chooses
	      # the last one in the list if none match.)
	      for CENV in $(getconf _POSIX_V6_WIDTH_RESTRICTED_ENVS)
	      do
		  case $CENV in
		  *OFF64*|*OFFBIG*) break ;;
		  esac
	      done

	      # The chosen environment name can now be used like this:

	      c99 $(getconf ${CENV}_CFLAGS) -D _POSIX_C_SOURCE=200112L \
	      $(getconf ${CENV}_LDFLAGS) foo.c -o foo \
	      $(getconf ${CENV}_LIBS)

RATIONALE
       The c99 utility is based on the c89 utility  originally	introduced  in
       the ISO POSIX-2:1993 standard.

       Some  of	 the changes from c89 include the modification to the contents
       of the Standard Libraries  section  to  account	for  new  headers  and
       options;	 for example, <spawn.h> added to the -l rt operand, and the -l
       trace operand added for the Tracing functions.

FUTURE DIRECTIONS
       None.

SEE ALSO
       File Read, Write, and Creation , ar , getconf , make ,  nm  ,  strip  ,
       umask()	,  the System Interfaces volume of IEEE Std 1003.1-2001, exec,
       sysconf(), the Base Definitions volume of IEEE Std 1003.1-2001, Chapter
       13, Headers

COPYRIGHT
       Portions	 of  this text are reprinted and reproduced in electronic form
       from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
       --  Portable  Operating	System	Interface (POSIX), The Open Group Base
       Specifications Issue 6, Copyright (C) 2001-2003	by  the	 Institute  of
       Electrical  and	Electronics  Engineers, Inc and The Open Group. In the
       event of any discrepancy between this version and the original IEEE and
       The  Open Group Standard, the original IEEE and The Open Group Standard
       is the referee document. The original Standard can be  obtained	online
       at http://www.opengroup.org/unix/online.html .

IEEE/The Open Group		     2003				C99(P)
[top]

List of man pages available for YellowDog

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net