FIX: Nested Macros Cause Errors C2065 and C2064 (164947)



The information in this article applies to:

  • Microsoft Visual C++, 32-bit Editions 4.0
  • Microsoft Visual C++, 32-bit Editions 4.1

This article was previously published under Q164947

SYMPTOMS

A nested macro may cause errors similar to the following:
error C2065: 'MACRO_B' : undeclared identifier
error C2064: term does not evaluate to a function
error C2143: syntax error : missing ';' before '}'

CAUSE

The second macro is not being expanded correctly. A preprocessed file for the following sample shows that MACRO_B is not expanded:
      { MACRO_B ("Hello world.\n") };
				
It should expand to:
      { { printf("Hello world.\n"); } };
				

STATUS

Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This bug was corrected in Visual C++ 32-bit Edition, versions 4.2.

MORE INFORMATION

Sample Code

      /* Compile options needed: none
      */ 

      #include <stdio.h>

      #define MACRO_A(A)      { MACRO_B A }
      #define MACRO_B(A)      { printf(A); }

      void main()
      {
          MACRO_A(("Hello world.\n"));
      }
				

Modification Type:MinorLast Reviewed:7/5/2005
Keywords:kbbug kbCodeGen kbCompiler kbfix KB164947