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

# ucpp(1)

C preprocessor

## NAME

ucpp - C preprocessor

## SYNOPSIS

**ucpp** \[ *options* \] \[ *file* \]

## DESCRIPTION

**ucpp** is a C preprocessor mostly compatible with ISO-C99. It is rather strict and uses only a small amount of memory. It uses standard input as primary input if no file argument is given.

## OPTIONS

There are several classes of options.

- **Language Options**

  - **-C**

  keep comments in the output.

- **-s**

  if a rogue '#' is encountered, do not emit an error and keep it in the output.

- **-l**

  supress the emission of '#line' directives in the output.

- **-lg**

  convert the '#line' to the gcc-style equivalent.

- **-CC**

  disable C++-like comments (a '//' begins a comment, up to the end of the line). Use this option to get closer to C90 behaviour.

- **-a, -na**

  handle assertions (defined with #assert); **-a** also defines the standard assertions *#machine* , *#cpu* and *#system* (see **-e** to get the local definition of such assertions).

- **-a0**

  disable assertion support.

- **-V**

  disable support for macros with a variable number of arguments: in C99, a macro may be declared with *...* as the last argument; inside the replacement list, *\_\_VA\_ARGS\_\_* is replaced with the optional extra arguments given in the call to the macro. Use this option to get closer to C90 behaviour.

- **-u**

  enable UTF-8 support: with this option, the source is considered as an ISO/10646 source, encoded in UTF-8. Characters represented as two bytes or more are considered as alphabetic characters, like letters, and therefore usable in identifiers. These characters hold the same syntactic value than the corresponding Universal Character Names.

- **-X**

  enable **-a, -u** and **-Y.** This should make **ucpp** behave closer to what is requested from a "modern" C preprocessor.

- **-c90**

  enable **-V** and **-CC,** and do not define **\_\_STDC\_VERSION\_\_.** This should make **ucpp** mimic older C90 behaviour.

- **-t**

  disable trigraph support; this seems to be required for some legacy code.

- **Warning Options**

  - **-wt**

  emit a final warning when trigraphs are encountered.

- **-wtt**

  emit warnings for each trigraph encountered.

- **-wa**

  emit annoying warnings (these are usually useless).

- **-w0**

  supress standard warnings.

- **Directory Options**

  - **-I***directory*

  - **-I** *directory*

  add *directory* to the include path, before the standard include path.

- **-J***directory*

  - **-J** *directory*

  add *directory* to the include path, after the standard include path.

- **-zI**

  do not use the standard (compile-time) include path.

- **-M**

  emit only the names of encountered files, separated by spaces; this is intended for automatic generation of Makefile dependencies.

- **-Ma**

  do the same as **-M** but also for system files.

- **-o** *file*

  direct the ouput to *file* instead of standard output.

- **Macro Options**

  - **-D***macro*

  predefine *macro* with content **1.**

- **-D***macro=def*

  predefine *macro* with the content *def.*

- **-U***macro*

  undefine *macro.*

- **-Y**

  predefine system-dependant macros.

- **-Z**

  do not predefine special macros such as **\_\_TIME\_\_.**

- **-A***foo(bar)*

  add *foo(bar)* to the list of assertions.

- **-B***foo(bar)*

  remove *foo(bar)* of the list of assertions; you may also use **-B***foo* to remove all **-B***foo(xxx)* from the list of assertions.

- **-d**

  instead of normal output, emit '#define' directives representing all macros defined during processing.

- **-e**

  instead of normal output, emit '#assert' directives representing all assertions defined during processing.

- **Miscellaneous Options**

  - **-v**

  print version number, include path and (optionaly) defined assertions.

- **-h**

  print some help.

## ENVIRONMENT

**ucpp** is not itself affected by environment variables. However, it uses library functions that might be affected, depending on the system.

## AUTHOR

Thomas Pornin \<pornin@bolet.org\>

## BUGS

**ucpp** is considered stable software. However improbable it is, please report bugs to the author (possibly with a file that exhibits the problem) if the latest version, available from this site:

- http://pornin.nerim.net/ucpp/

  has the bug.
