INFO: The Limit of Macro Expansion (61314)



The information in this article applies to:

  • Microsoft C for MS-DOS 6.0
  • Microsoft C for MS-DOS 6.0a
  • Microsoft C for MS-DOS 6.0ax
  • Microsoft C for OS/2 5.1
  • Microsoft C for OS/2 6.0
  • Microsoft C for OS/2 6.0a
  • Microsoft C/C++ for MS-DOS 7.0
  • Microsoft Visual C++ 1.0
  • Microsoft Visual C++ 1.5
  • Microsoft Visual C++ 1.51
  • Microsoft Visual C++, 32-bit Professional Edition 2.0
  • Microsoft Visual C++, 32-bit Professional Edition 2.1

This article was previously published under Q61314

SUMMARY

In Microsoft C and Visual C++, the limit of a preprocessor macro expansion can be no more than 6K when it is FULLY expanded. Similarly, actual arguments plus FULLY expanded actual arguments are not allowed to exceed 6K during a single macro expansion. Note that this is not the same as saying that the macro DEFINITIONS must be 6K or less. The 6K limitation was chosen because the buffer used for expansion is dynamically allocated, and 6K seems to be a reasonable limit for most real programs.

Additionally, there is a nesting DEPTH limit in C versions 6.0 and below of 64 on macros in C1.EXE, and 256 in C1L.EXE. The nesting limit for C 7.0 and Visual C++ 1.0 is 255. This may be noticed only if you are writing macros for some relocatable indexing scheme, such as in the following example:
   #define INCOME 1;
   #define EXPENSE (INCOME+1)
   #define GINCOME (EXPENSE+1)
   #define TAXES (GINCOME+1)
   #define NINCOME (TAXES+1)
				
and so on.

Modification Type:MinorLast Reviewed:7/5/2005
Keywords:kbCompiler kbinfo KB61314