Implementation Quantities

The C/C++ compiler has the implementation quantities listed in Table 1, based on the ISO C++ Standard. Although the values in the right-side column are the recommended minimums for each quantity, they do not determine the compliance of the quantity.

NOTE The right-side column value “unlimited” means unlimited only up to and including memory and time limitations.

Table 1. Implementation Quantities for the C/C++ Compiler
Quantity Minimum
Nesting levels of compound statements, iteration control structures, and selection control structures [256] Unlimited
Nesting levels of conditional inclusion [256] 32
Pointer, array, and function declarators (in any combination) modifying an arithmetic, structure, union, or incomplete type in a declaration [256] Unlimited
Nesting levels of parenthesized expressions within a full expression [256] Unlimited
Number of initial characters in an internal identifier or macro name [1024] Unlimited
(255 significant in identifiers)
Number of initial characters in an external identifier [1024] Unlimited
(255 significant in identifiers)
External identifiers in one translation unit [65536] Unlimited
Identifiers with block scope declared in one block [1024] Unlimited
Macro identifiers simultaneously defined in one translation unit [65536] Unlimited
Parameters in one function definition [256] Unlimited
Arguments in one function call [256] Unlimited
Parameters in one macro definition [256] 128
Arguments in one macro invocation [256] 128
Characters in one logical source line [65536] Unlimited
Characters in a character string literal or wide string literal (after concatenation) [65536] Unlimited
Size of an object [262144] 2 GB
Nesting levels for #include files [256] 32
Case labels for a switch statement (excluding those for any nested switch statements) [16384] Unlimited
Data members in a single class, structure, or union [16384] Unlimited
Enumeration constants in a single enumeration [4096] Unlimited
Levels of nested class, structure, or union definitions in a single struct-declaration-list [256] Unlimited
Functions registered by atexit()[32] 64
Direct and indirect base classes [16384] Unlimited
Direct base classes for a single class [1024] Unlimited
Members declared in a single class [4096] Unlimited
Final overriding virtual functions in a class, accessible or not [16384] Unlimited
Direct and indirect virtual bases of a class [1024] Unlimited
Static members of a class [1024] Unlimited
Friend declarations in a class [4096] Unlimited
Access control declarations in a class [4096] Unlimited
Member initializers in a constructor definition [6144] Unlimited
Scope qualifications of one identifier [256] Unlimited
Nested external specifications [1024] Unlimited
Template arguments in a template declaration [1024] Unlimited
Recursively nested template instantiations [17] Unlimited
Handlers per try block [256] Unlimited
Throw specifications on a single function declaration [256] Unlimited