Forum: Compiler & IDEs C++ und stdint.h


von Dosmo (Gast)


Lesenswert?

Hallo zusammen,

ich benutze in meinem C++ Programm die C99 Datentypen und würde auch 
gerne die Limitsbenutzen.
Jetzt sind diese allerdings ausgeblendet:

in stdint-ggc.h:
1
#if !defined __cplusplus || defined __STDC_LIMIT_MACROS
2
3
/* 7.18.2 Limits of specified-width integer types */
4
5
#ifdef __INT8_MAX__
6
# undef INT8_MAX
7
...

Wie bekomme ich denn in C++ die Limits?

von Dosmo (Gast)


Lesenswert?

Doof, hab's gefunden.
Anstatt
1
#include <stdint.h>
benutzt man in C++
1
#include <cstdint>

von Sven P. (Gast)


Lesenswert?

In C++ (C++11) müsste das nicht <stdint.h> sondern <cstdint> sein. Um 
deine Makros zu bekommen, musst du vorher __STDC_LIMIT_MACROS 
definieren. Steht sogar eine Zeile drüber :-)
1
/* The ISO C99 standard specifies that in C++ implementations these
2
   macros should only be defined if explicitly requested.  */
3
#if !defined __cplusplus || defined __STDC_LIMIT_MACROS

von Dr. Sommer (Gast)


Lesenswert?

In C++ funktionieren die Limits anders:
1
#include <limits>
2
3
int main () {
4
  std::cout << std::numeric_limits<int>::max () << ", " << std::numeric_limits<double>::min ();
5
}
Das ist so viel eleganter denn so kann der Typ zB ein Template-Parameter 
oder ein typedef sein und man kann dennoch die dazu passenden Limits 
abfragen (im Gegensatz zu den Limit-Makros).

Und seit C++11 wurde <stdint.h> in <cstdint> umbenannt, ja.

von Dr. Sommer (Gast)


Lesenswert?

Hier ist auch noch die Doku zu allen in 
std::numeric_limits<some_numeric_type>::... definierten 
Funktionen/Variablen:
http://en.cppreference.com/w/cpp/types/numeric_limits

von Dosmo (Gast)


Lesenswert?

Okay, danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.