KnowledgeBase Archive

An Archive of Early Microsoft KnowledgeBase Articles

View on GitHub

Q39974: Error C2177: Constant Too Big

Article: Q39974
Product(s): See article
Version(s): 5.10   | 5.10
Operating System(s): MS-DOS | OS/2
Keyword(s): ENDUSER | s_quickc | mspl13_c
Last Modified: 9-JAN-1989

The code below produces compiler error "C2177 : constant too big,"
even though variable p is an unsigned long. The compiler does not
generate this error if the number is 2,147,483,647 (maximum signed
long possible) or less. Casting p to an unsigned long or putting L
(for long) on the end of the number had no effect.

This information also applies to QuickC.

The following example demonstrates the error:

#include <stdio.h>
main()
{
  unsigned long p;
  p = 4294967295;      /* maximum unsigned long */
  printf("%lu is the maximum unsigned long.",p);
}

According to the include file limits.h, to declare something as
unsigned long, one must use the hexadecimal form if the number will be
greater than 2,147,483,647. The code should be changed to the following:

#include <stdio.h>
main()
{
  unsigned long p;
  p = 0xffffffff;
  printf("%lu is the maximum unsigned long.",p);
}

The code will produce the following output:

   4294967295 is the maximum unsigned long.

THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Copyright Microsoft Corporation 1986-2002.