Article ID: 116170 - Last Review: July 5, 2005 - Revision: 1.1

FIX: C2099 Generated Initializing Struct with Macro

This article was previously published under Q116170

On This Page

Expand all | Collapse all

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)
   {
   }
				

APPLIES TO
  • Microsoft C/C++ Professional Development System 7.0
  • Microsoft Visual C++ 1.0 Professional Edition
  • Microsoft Visual C++ 1.5 Professional Edition
  • Microsoft Visual C++ 2.0 Professional Edition
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ 4.1 Subscription
  • Microsoft Visual C++ 4.2 Professional Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 5.0 Learning Edition
Keywords: 
kbbug kbfix kbvc600fix KB116170
Retired KB ArticleRetired KB Content Disclaimer
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.
 

Article Translations