---
name: "c99"
section: "1"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/c99"
---

# c99(1)

standard C language compiler

## NAME

**c99** – standard C language compiler

## SYNOPSIS

**c99** \[**-cEgs**\] \[**-D** *name*\[=*value*\]\] ... \[**-I** *directory*\] ... \[**-L** *directory*\] ... \[**-o** *outfile*\] \[**-O** *optlevel*\] \[**-U** *name*\] ... *operand* *...*

## DESCRIPTION

This is the name of the C language compiler as required by the IEEE Std 1003.1-2001 (“POSIX.1”) standard.

The **c99** compiler accepts the following options:

- **-c**

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

- **-D** *name*\[=*value*\]

  Define name as if by a C-language **#define** directive. If no “=*value*” is given, a value of 1 will be used. Note that in order to request a translation as specified by IEEE Std 1003.1-2001 (“POSIX.1”), you need to define \_POSIX\_C\_SOURCE=200112L either in the source or using this option. 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* will be undefined regardless of the order of the options. The **-D** option may be specified more than once.

- **-E**

  Copy C-language source files to the standard output, expanding all preprocessor directives; no compilation will be performed.

- **-g**

  Produce symbolic information in the object or executable files.

- **-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 ("") will 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 will 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. The **-I** option may be specified more than once.

- **-L** *directory*

  Change the algorithm of searching for the libraries named in the **-l** objects to look in the directory named by the *directory* pathname before looking in the usual places. Directories named in **-L** options will be searched in the order specified. The **-L** option may be specified more than once.

- **-o** *outfile*

  Use the pathname *outfile*, instead of the default *a.out*, for the executable file produced.

- **-O** *optlevel*

  If *optlevel* is zero, disable all optimizations. Otherwise, enable optimizations at the specified level.

- **-s**

  Produce object and/or executable files from which symbolic and other information not required for proper execution has been removed (stripped).

- **-U** *name*

  Remove any initial definition of *name*. The **-U** option may be specified more than once.

An operand is either in the form of a pathname or the form **-l** library. At least one operand of the pathname form needs to be specified. Supported operands are of the form:

- *file**.c*

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

- *file**.a*

  A library of object files, as produced by [ar(1)](/ar/1.md), passed directly to the link editor.

- *file**.o*

  An object file produced by **c99** **-c**, and passed directly to the link editor.

- **-l** *library*

  Search the library named *lib**library**.a*. A library will be searched when its name is encountered, so the placement of a **-l** operand is significant.

## SEE ALSO

[ar(1)](/ar/1.md), [c89(1)](/c89/1.md), [cc(1)](/cc/1.md), [c99(7)](/c99/7.md)

## STANDARDS

The **c99** utility interface conforms to IEEE Std 1003.1-2001 (“POSIX.1”).
