The C99 standard (ISO/IEC: 9899:1999) has the following to say on the matter:5.2.4.1 Translation limitsThe implementation shall be able to translate and execute at least one program that contains at least one instance of every one of the following limits:127 nesting levels of blocks63 nesting levels of conditional inclusion12 pointer, array, and function declarators (in any combinations) modifying an arithmetic, structure, union, or incomplete type in a declaration63 nesting levels of parenthesised declarators within a full declarator63 nesting levels of parenthesised expressions within a full expression63 significant initial characters in an internal identifier or a macro name (each universal character name or extended source character is considered a single character)31 significant initial characters in an external identifier (each universal character name specifying a short identifier of 0000FFFF or less is considered 6 characters, each universal character name specifying a short identifier of 00010000 or more is considered 10 characters, and each extended source character is considered the same number of characters as the corresponding universal character name, if any)4095 external identifiers in one translation unit511 identifiers with block scope declared in one block4095 macro identifiers simultaneously defined in one preprocessing translation unit127 parameters in one function definition127 arguments in one function call127 parameters in one macro definition127 arguments in one macro invocation4095 characters in a logical source line4095 characters in a character string literal or wide string literal (after concatenation)65535 bytes in an object (in a hosted environment only)15 nesting levels for #included files1023 case labels for a switch statement (excluding those for any nested switch statements)1023 members in a single structure or union1023 enumeration constants in a single enumeration63 levels of nested structure or union definitions in a single struct-declaration-listFootnote: Implementations should avoid imposing fixed translation limits whenever possible.There is no practical reason to impose these limits within the compiler let alone to make these limits available to the programmer, hence there is no standard header that defines them. Even if there were, the information is of no use to you let alone to the compiler, given that the compiler cannot arbitrarily change your identifier name lengths to suit. After all, those identifiers are supposed to be portable!If translation limits do exist for your specific compiler, then it should be documented. A C99 compliant compiler must meet (or exceed) the limits defined by the C99 standard but those limits are such that "ordinary", portable code should never exceed them. After all, an identifier is only useful if it is readable, but if you have several identifiers such that the first 63 characters are an exact match then your code is anything but readable.