Knowledge Base

FIX: C2099 Generated Initializing Struct with Macro

Article ID: 116170

Article Last Modified on 7/5/2005


APPLIES TO


This article was previously published under Q116170

SYMPTOMS

Using a macro to initialize a structure causes the C/C++ compiler to incorrectly generate the following error message:
error C2099: initializer is not a constant

STATUS

Microsoft has confirmed that this is a problem in the Microsoft products that are listed at the beginning of this article.

This problem was corrected in Microsoft Visual C++ version 6.0.

MORE INFORMATION

The sample code below can be used to reproduce this problem:

Sample Code

   /* Compile options needed: none
   */ 

   #include <stddef.h>

   #define ZIP     struct zip_struct
   #define ZOT     struct zot_struct
   #define TABLE   struct table_struct

   ZIP
   {
      ZOT
      {
         int num;
      } m_zot;
   };

   #define MACRO(tok) \ 
      { (offsetof(ZIP, m_zot.tok) - offsetof(ZIP, m_zot)) / sizeof(int) }

   TABLE
   {
      int Offset;
      int ModNum;
   };

   TABLE test[] = { { offsetof(ZIP, m_zot.num) - offsetof(ZIP, m_zot)
                    / sizeof(int) } };
   TABLE test2[] = { { MACRO(num) } };

   void main(void)
   {
   }
				

Additional query words: kbVC400bug 8.00 8.00c 9.00 10.00 10.10 10.20

Keywords: kbbug kbfix kbvc600fix KB116170