delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2011/11/29/05:23:14

X-Recipient: archive-cygwin AT delorie DOT com
X-SWARE-Spam-Status: No, hits=-2.2 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW
X-Spam-Check-By: sourceware.org
MIME-Version: 1.0
In-Reply-To: <OFAEC4844B.D2808564-ONC1257957.0035691D-C1257957.00374E79@de.ibm.com>
References: <OFAEC4844B DOT D2808564-ONC1257957 DOT 0035691D-C1257957 DOT 00374E79 AT de DOT ibm DOT com>
Date: Tue, 29 Nov 2011 11:22:49 +0100
Message-ID: <CAEhDDbDnBSxmVVfghsEaRrCa5a89ESAo_Pf6jMcVZh-Uq-STnQ@mail.gmail.com>
Subject: Re: How to get std::strtoull (unsigned long long)?
From: Csaba Raduly <rcsaba AT gmail DOT com>
To: cygwin AT cygwin DOT com, MSELVE AT de DOT ibm DOT com
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Unsubscribe: <mailto:cygwin-unsubscribe-archive-cygwin=delorie DOT com AT cygwin DOT com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
X-MIME-Autoconverted: from quoted-printable to 8bit by delorie.com id pATANA73004907

On Tue, Nov 29, 2011 at 11:04 AM, Markus Selve  wrote:
>
> Hello,
>
> I'm trying to use std::strtoull in a C++ program, but compiling it I get:
>
>  error: 'strtoull' is not a member of 'std'
>
> It works, if I use strtoul ('unsigned long' versus 'unsigned long long'
> above).
> Cygwin uses newlib and I checked the documentation on the newlib homepage:
> It provides both the 'unsigned long' and the 'unsigned long long' version.
> Also cygwin/gcc allows to use 'unsigned long long' variables.  So it's not
> that everything related 64 bit is not available, because I'm compiling for
> a 32bit Windows.  Is there a special option I should use to get access to
> more 64 bit methods?
>
> Here is a simple test program to show the effect:
>
> #include <cstdlib>
>
> int main(int argc, char** argv)
> {
>    unsigned long long l = 0;
>
>    l = std::strtoull("0x100", NULL, 16);
>
>    return 0;
> }
>
>
> This is the call to the compiler:
>
> $ g++ -Wall -o tt tt.cpp
> tt.cpp: In function 'int main(int, char**)':
> tt.cpp:7:9: error: 'strtoull' is not a member of 'std'
>
>
> Here is my version of cygwin and gcc / g++:
> CYGWIN_NT-5.1 XXXXXXXX 1.7.9(0.237/5/3) 2011-03-29 10:10 i686 Cygwin
> g++ (GCC) 4.5.3
>

Alas, cstdlib is missing the necessary using directive:

$ g++ -E strtoull.cpp | grep strto
# 1 "strtoull.cpp"
# 1 "strtoull.cpp"
          char * _strtok_last;
double __attribute__((__cdecl__)) strtod (const char *__n, char **__end_PTR);
double __attribute__((__cdecl__)) _strtod_r (struct _reent *,const
char *__n, char **__end_PTR);
float __attribute__((__cdecl__)) strtof (const char *__n, char **__end_PTR);
long __attribute__((__cdecl__)) strtol (const char *__n, char
**__end_PTR, int __base);
long __attribute__((__cdecl__)) _strtol_r (struct _reent *,const char
*__n, char **__end_PTR, int __base);
unsigned long __attribute__((__cdecl__)) strtoul (const char *__n,
char **__end_PTR, int __base);
unsigned long __attribute__((__cdecl__)) _strtoul_r (struct _reent
*,const char *__n, char **__end_PTR, int __base);
long long __attribute__((__cdecl__)) strtoll (const char *__n, char
**__end_PTR, int __base);
long long __attribute__((__cdecl__)) _strtoll_r (struct _reent *,
const char *__n, char **__end_PTR, int __base);
unsigned long long __attribute__((__cdecl__)) strtoull (const char
*__n, char **__end_PTR, int __base);
unsigned long long __attribute__((__cdecl__)) _strtoull_r (struct
_reent *, const char *__n, char **__end_PTR, int __base);
  using ::strtod;
  using ::strtol;
  using ::strtoul;
# 1 "strtoull.cpp" 2

So although stdlib.h defines strtoull, it is not made a member of namespace std.

-- 
GCS a+ e++ d- C++ ULS$ L+$ !E- W++ P+++$ w++$ tv+ b++ DI D++ 5++
The Tao of math: The numbers you can count are not the real numbers.
Life is complex, with real and imaginary parts.
"Ok, it boots. Which means it must be bug-free and perfect. " -- Linus Torvalds
"People disagree with me. I just ignore them." -- Linus Torvalds

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019