Forum: Compiler & IDEs UINT16_MAX aus <stdint.h> in cpp benutzen


von Adib (Gast)


Lesenswert?

Hallo Leute,

in meinen reinen C Projekten nutze ich immer die Definitionen aus der 
<stdint.h>:
uint8_t, uint16_t und uint32_t genauso wie
UINT16_MAX usw

Wenn ich den Quellcode copy&paste in ein cpp benutze, gibt es immer 
wieder Kompilierfehler, das UINT16_MAX nicht definiert ist.

Ich benutze Qt 5.5 mit dem Mingw Compiler.

Dort steht im <stdint.h>:
1
/* 7.18.2  Limits of specified-width integer types */
2
#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) ||  \
3
    defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L
4
5
/* 7.18.2.1  Limits of exact-width integer types */
6
#define INT8_MIN (-128)
7
#define INT16_MIN (-32768)
8
#define INT32_MIN (-2147483647 - 1)
9
#define INT64_MIN  (-9223372036854775

Also er würde die Macros kennen, wenn
- defined(__STDC_LIMIT_MACROS) gesetzt ist oder
- __cplusplus >= 201103L erfüllt ist.

Meine Frage:
- darf/soll ich ich über meine IDE im Buildprozess __STDC_LIMIT_MACROS 
setzen? Oder ist das eher für Compiler-interne Sachen?
- Was ist der bevorzugte Weg diese Sachen (INT16_MIN) zu benutzen?

(PS Ich weiss unter cpp gibt es noch die #include <limits>, aber ich 
wollte den reinen/unmodifizierten C Code benutzen.)

Danke für eure Hinweise.

Adib.
--

von Clemens L. (c_l)


Lesenswert?

Normalerweise versteht gcc C++98, wo diese Symbole noch nicht definiert 
waren. Für C++11 (mit GNU-Extensions) musst du -std=gnu++11 angeben: 
https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html

von Adib (Gast)


Lesenswert?

Hallo Clemens,

Danke, so funktioniert es.

Adib.
--

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.