discuss-gnustep
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Can't use long long variables?


From: Philip Mötteli
Subject: Re: Can't use long long variables?
Date: Fri, 27 Feb 2004 00:01:25 +0100

Am 26.02.2004 um 23:36 schrieb Chris B. Vetter:
On Thu, 26 Feb 2004 23:19:20 +0100
Philip Mötteli <Philip.Moetteli@tele2.ch> wrote:
Am 26.02.2004 um 21:30 schrieb Chris B. Vetter:
Configure only checks whether LONG_LONG_MAX or LLONG_MAX (Solaris &
BSD) are defined in limits.h,
Yes, actually in limits.h, there's no LONG_LONG_MAX defined. And
configure gives the following otuput in base:
        checking whether precompiler handles LONG_LONG_MAX... no

It should also check for LLONG_MAX in that case.

        checking whether we have LLONG_MAX... no


Alternatively you could try to find a work-around in your tool to
not use -scanLongLong: (probably easier, if that's an option)
I don't remember using it. Could it be, that it's invoked by another
method, e. g. -scanInt or -scanLong?

Quite possibly, depending on the libraries/frameworks you're including.
I did a quick scan on the exception notice and on scanLongLong. Both
appear only once in -core, in NSScanner.m

I actually found it in my code and might be able to temporarely replace it with a -scanLong. But that's not really the solution that pleases.


so you may have to check whether SuSE uses one
of these or uses a different definition.
[...]
If the latter, this would have to be added to the checks.
It doesn't seem, that there's a suitable one, is it?

Well, on my box here (FreeBSD) LLONG_MAX is actually defined in
/usr/include/machine/limits.h which is included from limits.h
So you may have to "dig deeper". You could/should try a recursive grep
on your system's /usr/include.

I did that and found out, that I actually looked at '/usr/include/linux/limits.h'. But there's another in '/usr/include'. And this one seems promising. I quoted it at the end of this posting. It seems to me, that the definition is somehow excluded by some ifdefs. But please have a look yourself.


Re
Phil


PS:  # cat /usr/include/limits.h
/* Copyright (C) 1991, 92, 96, 97, 98, 99, 2000 Free Software Foundation, Inc.
   This file is part of the GNU C Library.

   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   The GNU C Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, write to the Free
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   02111-1307 USA.  */

/*
* ISO C99 Standard: 7.10/5.2.4.2.1 Sizes of integer types <limits.h>
 */

#ifndef _LIBC_LIMITS_H_
#define _LIBC_LIMITS_H_ 1

#include <features.h>


/* Maximum length of any multibyte character in any locale.
   We define this value here since the gcc header does not define
   the correct value.  */
#define MB_LEN_MAX      16


/* If we are not using GNU CC we have to define all the symbols ourself.
   Otherwise use gcc's definitions (see below).  */
#if !defined __GNUC__ || __GNUC__ < 2

/* We only protect from multiple inclusion here, because all the other
#include's protect themselves, and in GCC 2 we may #include_next through
   multiple copies of this file before we get to GCC's.  */
# ifndef _LIMITS_H
#  define _LIMITS_H     1

#include <bits/wordsize.h>

/* We don't have #include_next.
   Define ANSI <limits.h> for standard 32-bit words.  */

/* These assume 8-bit `char's, 16-bit `short int's,
   and 32-bit `int's and `long int's.  */

/* Number of bits in a `char'.  */
#  define CHAR_BIT      8

/* Minimum and maximum values a `signed char' can hold.  */
#  define SCHAR_MIN     (-128)
#  define SCHAR_MAX     127

/* Maximum value an `unsigned char' can hold.  (Minimum is 0.)  */
#  define UCHAR_MAX     255

/* Minimum and maximum values a `char' can hold.  */
#  ifdef __CHAR_UNSIGNED__
#   define CHAR_MIN     0
#   define CHAR_MAX     UCHAR_MAX
#  else
#   define CHAR_MIN     SCHAR_MIN
#   define CHAR_MAX     SCHAR_MAX
#  endif

/* Minimum and maximum values a `signed short int' can hold.  */
#  define SHRT_MIN      (-32768)
#  define SHRT_MAX      32767

/* Maximum value an `unsigned short int' can hold.  (Minimum is 0.)  */
#  define USHRT_MAX     65535

/* Minimum and maximum values a `signed int' can hold.  */
#  define INT_MIN       (-INT_MAX - 1)
#  define INT_MAX       2147483647

/* Maximum value an `unsigned int' can hold.  (Minimum is 0.)  */
#  define UINT_MAX      4294967295U

/* Minimum and maximum values a `signed long int' can hold.  */
#  if __WORDSIZE == 64
#   define LONG_MAX     9223372036854775807L
#  else
#   define LONG_MAX     2147483647L
#  endif
#  define LONG_MIN      (-LONG_MAX - 1L)

/* Maximum value an `unsigned long int' can hold.  (Minimum is 0.)  */
#  if __WORDSIZE == 64
#   define ULONG_MAX    18446744073709551615UL
#  else
#   define ULONG_MAX    4294967295UL
#  endif

#  ifdef __USE_ISOC99

/* Minimum and maximum values a `signed long long int' can hold.  */
#   define LLONG_MAX    9223372036854775807LL
#   define LLONG_MIN    (-LLONG_MAX - 1LL)

/* Maximum value an `unsigned long long int' can hold. (Minimum is 0.) */
#   define ULLONG_MAX   18446744073709551615ULL

#  endif /* ISO C99 */

# endif /* limits.h  */
#endif  /* GCC 2.  */

#endif  /* !_LIBC_LIMITS_H_ */

/* Get the compiler's limits.h, which defines almost all the ISO constants.

    We put this #include_next outside the double inclusion check because
it should be possible to include this file more than once and still get
    the definitions from gcc's header.  */
#if defined __GNUC__ && !defined _GCC_LIMITS_H_
/* `_GCC_LIMITS_H_' is what GCC's file defines.  */
# include_next <limits.h>

/* The <limits.h> files in some gcc versions don't define LLONG_MIN,
   LLONG_MAX, and ULLONG_MAX.  Instead only the values gcc defined for
   ages are available.  */
# ifdef __USE_ISOC99
#  ifndef LLONG_MIN
#   define LLONG_MIN    LONG_LONG_MIN
#  endif
#  ifndef LLONG_MAX
#   define LLONG_MAX    LONG_LONG_MAX
#  endif
#  ifndef ULLONG_MAX
#   define ULLONG_MAX   ULONG_LONG_MAX
#  endif
# endif
#endif

#ifdef  __USE_POSIX
/* POSIX adds things to <limits.h>.  */
# include <bits/posix1_lim.h>
#endif

#ifdef  __USE_POSIX2
# include <bits/posix2_lim.h>
#endif

#ifdef  __USE_XOPEN
# include <bits/xopen_lim.h>
#endif




reply via email to

[Prev in Thread] Current Thread [Next in Thread]