Microsoft KB Archive/51724

= DOC: Clarification of the /H Identifier Length Option =

Article ID: 51724

Article Last Modified on 7/5/2005

-

APPLIES TO


 * Microsoft C Professional Development System 6.0a
 * Microsoft Visual C++ 1.0 Professional Edition
 * Microsoft Visual C++ 1.5 Professional Edition
 * Microsoft Visual C++ 1.0 Professional Edition
 * Microsoft Visual C++ 2.0 Professional Edition
 * Microsoft Visual C++ 2.1
 * Microsoft Visual C++ 4.0 Standard Edition
 * Microsoft Visual C++ 4.1 Subscription
 * Microsoft Visual C++ 5.0 Standard Edition
 * Microsoft Visual C++ 6.0 Service Pack 5

-



This article was previously published under Q51724





SUMMARY
In Microsoft C, the /H option is used to set the maximum length of identifiers. Using /H can only decrease the maximum allowable length of identifiers, not increase it. An identifier declared with the CDECL type has an underscore (_) appended to the front at compile time. This character is part of the identifier and takes a significant location. Therefore, the maximum length of an identifier declared with the standard C declaration syntax is 32 characters.

In C/C++ version 7.0, the default maximum length is also 32 characters. However, in this version, the /H option may be used to increase this to a maximum of 247 characters.

In Visual C++ 16-bit and Visual C++ 32-bit, there is no default maximum length--identifiers can be up to 2047 characters in length. Compiling a program with an identifier containing more than 2047 characters will generate fatal error C1064, compiler limit : token overflowed internal buffer.



MORE INFORMATION
The following example shows how using /H can actually introduce errors if identifier lengths are limited too much:

Sample Code
/* When compiled with /H5, the following code will produce either *   error L2025: _func : symbol defined more than once *     -or- *  error LNK2005: _func already defined in '.obj file' *  fatal error LNK1169: one or more multiply defined symbols found *     -or- *  fatal error LNK1179: invalid or corrupt file: duplicate comdat

void func1(void); void func2(void);

void main(void) {    func1; }

void func1(void) { }

void func2(void) { } You must also be careful when using the /H option because of predefined compiler identifiers. If the maximum identifier length is too small, certain predefined identifiers will be unresolved as well as certain library function calls. For example, if the printf function is used and the option /H5 is specified at compile time, the symbol _prin will be created in order to reference printf, and this will not be found in the library.

Additional query words: 8.00 8.00c 9.00 10.00 10.10 kbCompiler kbVC100 kbVC150 kbVC200 kbVC210 kbVC400 kbVC410 kbVC500 kbDSupport

Keywords: kbbug kbdocerr KB51724

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.