mcpp1
Matsui cpp, an alternative c preprocessor
Usage
mcpp [options]
[<infile>
[<outfile>]]
Overview
mcpp is a C/C++ preprocessor with the highest conformance which implements C90, C99 and C++98. mcpp has plentiful diagnostics and many #pragmas. It is useful to check portability of your program, and also useful to debug complicated macro. This is a man-page for mcpp of compiler-independent-build.
Options
mcpp expects two file names as arguments, <infile> and <outfile>. If not specified, <infile> defaults to standard input and <outfile> defaults to standard output.
It takes the following options.
Commonly used options:
-
-@MODE -
Specify preprocessing mode. MODE should be one of these 4:
-
-@std -
Standard conforming mode. (default)
-
-@poststd, -@post -
special 'post-Standard' mode.
-
-@kr -
K&R 1st mode.
-
-@oldprep, -@old -
"old_preprocessor" mode (i.e. "Reiser model" cpp).
-
-@compat -
Standard 'compatible' mode.
-
-C -
Output also comments.
-
-D <macro>[=<value>] -
Define <macro> as <value> (default:1).
-
-D <macro(args)>[=<replace>] -
Define <macro(args)> as <replace>.
-
-e <encoding> -
Change the default multi-byte character encoding to one of: euc_jp, gb2312, ksc5601, big5, sjis, iso2022_jp, utf8.
-
-I <directory> -
Add <directory> to the #include search list.
-
-I- -
Unset system or site specific include directories.
-
-j -
Do not output the source line in diagnostics.
-
-k -
Keep white spaces of input lines as they are.
-
-M, -MM, -MD, -MMD, -MP, -MQ target, -MT target, -MF file -
Output source file dependency line for makefile.
-
-m32 -
Change target CPU from x86_64, ppc64 to i386, ppc, respectively.
-
-m64 -
Change target CPU from i386, ppc to x86_64, ppc64, respectively.
-[no-]mmx-
(Un-)define __MMX__.
-
-N -
Don't predefine any non-standard macros.
-
-o <file> -
Output to <file>.
-
-P -
Don't output #line lines.
-
-Q -
Output diagnostics to "mcpp.err" (default:stderr).
-
-U <macro> -
Undefine <macro>.
-
-v -
Show version of
mcpp.
-
-W <level> -
Set warning level to <level> (OR of {0,1,2,4,8,16}, default:1).
-
-z -
Don't output the included file, only defining macros.
Options available with -@std (default) or -@poststd options:
-
-+ -
Process C++ source.
-
-2 -
Enable digraphs.
-
-h <n> -
Re-define the pre-defined macro __STDC_HOSTED__ as <n>.
-
-S <n> -
Redefine __STDC__ to <n>, undefine old style macros.
-
-V <n> -
Redefine __STDC_VERSION__ or __cplusplus to <n>.
C with -V199901L specifies C99 mode.
C++ with -V199901L specifies C99 compatible mode.
Options available with only -@std (default) option:
-
-@compat -
Expand recursive macro more than Standard.
-
-3 -
Enable trigraphs.
-
-K -
Embed macro annotations into comments.
Options available with -@std (default), -@kr or -@oldprep options:
-
-a -
Process "assembler" source.
Pragma
mcpp has the following #pragma directives.
- #pragma once
-
Read the header file only once even if multiply #included.
- #pragma __setlocale( "encoding")
-
Specify the multibyte character encoding to "encoding". See -e option for the encodings.
- #pragma MCPP put_defines
-
Putout all the macro definitions currently valid.
- #pragma MCPP debug <args>
-
Start to putout debugging informations.
<args> should be one or more of:
token expand macro_call path if expression memory getc
- #pragma MCPP end_debug <args>
-
Stop to putout debugging informations.
<args> are the same with 'debug'.
No argument specifies all arguments.
- #pragma MCPP push_macro( "MACRO")
-
Save the macro definition to the stack.
- #pragma MCPP pop_macro( "MACRO")
-
Retrieve the macro definition from the stack.
- #pragma MCPP preprocess
-
"Pre-preprocess" the following header files for
mcpp.
- #pragma MCPP warning any message
-
Putout warning "any message".
Version
MCPP V.2.7 (2008/03) compiler-independent-build
Releases
12 releases since Debian 3.1 (Sarge); the text changed 3 times.
-@MODE since Debian 4.0 (Etch);
-@compat since Debian 4.0 (Etch);
-@kr since Debian 4.0 (Etch);
-@old since Debian 4.0 (Etch);
-@oldprep since Debian 4.0 (Etch);
-@post since Debian 4.0 (Etch);
-@poststd since Debian 4.0 (Etch);
-@std since Debian 4.0 (Etch);
-I- since Debian 4.0 (Etch);
-K since Debian 5.0 (Lenny);
-e since Debian 4.0 (Etch);
-k since Arch Linux 2026-11-01;
-m32 since Arch Linux 2026-11-01;
-m64 since Arch Linux 2026-11-01.
-E until Debian 3.1 (Sarge);
-b until Debian 3.1 (Sarge);
-c until Debian 3.1 (Sarge);
-digraphs until Debian 3.1 (Sarge);
-include until Debian 3.1 (Sarge);
-lang-asm until Debian 3.1 (Sarge);
-lang-c++ until Debian 3.1 (Sarge);
-lang-c89 until Debian 3.1 (Sarge);
-m until Debian 3.1 (Sarge);
-nostdinc until Debian 3.1 (Sarge);
-pedantic until Debian 3.1 (Sarge);
-pedantic-errors until Debian 3.1 (Sarge);
-std until Debian 3.1 (Sarge);
-trigraphs until Debian 3.1 (Sarge);
-undef until Debian 3.1 (Sarge);
-w until Debian 3.1 (Sarge);
-x until Debian 3.1 (Sarge).