FIX: Nested Macros Cause Errors C2065 and C2064

ID: Q164947


The information in this article applies to:
  • The C/C++ Compiler (CL.EXE), included with:
    • Microsoft Visual C++, 32-bit Editions, versions 4.0, 4.1


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"));
      } 

Additional query words: kbVC420bug kbVC400bug

Keywords : kbCodeGen kbCompiler
Version : winnt:4.0,4.1
Platform : winnt
Issue type : kbbug


Last Reviewed: January 25, 2000
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.