Google Answers Logo
View Question
 
Q: g++ problems with strtoll (LLONG_MIN, LLONG_MAX, ULLONG_MAX not defined) ( No Answer,   1 Comment )
Question  
Subject: g++ problems with strtoll (LLONG_MIN, LLONG_MAX, ULLONG_MAX not defined)
Category: Computers > Programming
Asked by: crowdman-ga
List Price: $10.00
Posted: 23 Apr 2004 09:43 PDT
Expires: 23 Apr 2004 19:40 PDT
Question ID: 334912
I can't compile in the constants LLONG_MIN, LLONG_MAX, or ULLONG_MAX. 
These are defined in the system doc for strtoll and strtoull, and
appear to be in limits.h, but the compiler won't recognize them (due
to layers of #ifdefs).  If I turn on -std=c99, it will give me the
constants, but it messes everything else up.

I've come up with a workaround, so I don't need that.  I'm trying to
understand if this is a g++ bug, or if I'm doing something wrong.

I've got a Redhat Linux Workstation 3 system which I'm running c++ on.
I've got all the latest patches from redhat, and I'm running kernel
version  2.4.21-9.0.1.EL.
g++ version info:
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/3.2.3/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man
--infodir=/usr/share/info --enable-shared --enable-threads=posix
--disable-checking --with-system-zlib --enable-__cxa_atexit
--host=i386-redhat-linux
Thread model: posix
gcc version 3.2.3 20030502 (Red Hat Linux 3.2.3-24)
Answer  
There is no answer at this time.

Comments  
Subject: Re: g++ problems with strtoll (LLONG_MIN, LLONG_MAX, ULLONG_MAX not defined)
From: nmiell-ga on 23 Apr 2004 18:06 PDT
 
By default, gcc compiles C++ code in 'gnu++98' mode, which is an
implementation of the 1998 ISO C++ standard (as amended) and GNU
extensions. gcc also supports a 'c++98' mode which is strictly the
1998 ISO C++ standard.

Because the long long type (and it's associated minimum and maximum
constants) wasn't introduced to the C language until 1999, the 1998
C++ standard doesn't include them.

Thus, it's perfectly fine (although annoying) for gcc to hide
LLONG_MIN and company from C++ programs.

The next revision of the C++ has largely incorporated the C99 changes,
but that won't help you until the standard is finalized, gcc has
implemented it, and you've upgraded to a version of RHEL that includes
the new gcc.

Until then (or, preferrably forever, from a C++ correctness
standpoint), use the  min() and max() methods of the
std::numeric_limits<long long> and std::numeric_limits<unsigned long
long> classes.

For example:

#include <limits>
#include <iostream>
 
using namespace std;
 
int main(int argc, char* argv[])
{
        numeric_limits<long long> ll;
        numeric_limits<unsigned long long> ull;
 
        cout    << "long long minimum: "                << ll.min()     << endl
                << "long long maximum: "                << ll.max()     << endl
                << "unsigned long long minimum: "       << ull.min()    << endl
                << "unsigned long long maximum: "       << ull.max()    << endl; 
        return 0;
}

Important Disclaimer: Answers and comments provided on Google Answers are general information, and are not intended to substitute for informed professional medical, psychiatric, psychological, tax, legal, investment, accounting, or other professional advice. Google does not endorse, and expressly disclaims liability for any product, manufacturer, distributor, service or service provider mentioned or any opinion expressed in answers or comments. Please read carefully the Google Answers Terms of Service.

If you feel that you have found inappropriate content, please let us know by emailing us at answers-support@google.com with the question ID listed above. Thank you.
Search Google Answers for
Google Answers  


Google Home - Answers FAQ - Terms of Service - Privacy Policy