我的代码如下(混合C / C ++应用程序)
#include <stdint.h>
#define BUFFER_SIZE UINT16_MAX
我期望BUFFER_SIZE
为(65535),就像在stdint.h中定义UINT16_MAX
一样,但编译器抱怨UINT16_MAX
未定义。显然,宏观扩张并没有像我想的那样发生。
我可以自己定义(65535),但想知道为什么这不起作用。
对几条评论的回应:
我的编译器支持uint16_t
类型,而UINT16_MAX
在stdint.h中定义
有人提到定义__STDC_LIMIT_MACROS
- 在尝试将stdint.h包含在内之前,我已经尝试过定义它。
ANSWER
所以它是__STDC_LIMIT_MACROS
但更复杂。
__STDC_LIMIT_MACROS
__STDC_LIMIT_MACROS
未定义我的解决方案只是将-D__STDC_LIMIT_MACROS
添加到我的编译器参数中。
答案 0 :(得分:6)
你似乎正在使用C ++,你可能会这样做:
#define __STDC_LIMIT_MACROS
来自最近Debian的/usr/include/stdint.h
:
/* The ISO C99 standard specifies that in C++ implementations these
macros should only be defined if explicitly requested. */
#if !defined __cplusplus || defined __STDC_LIMIT_MACROS
...
/* Maximum of unsigned integral types. */
# define UINT8_MAX (255)
# define UINT16_MAX (65535)
# define UINT32_MAX (4294967295U)
# define UINT64_MAX (__UINT64_C(18446744073709551615))
答案 1 :(得分:3)
如果要包含C ++ 03文件中的C头,则需要在包含头之前定义__STDC_LIMIT_MACROS
;否则它可能无法定义这些宏。
如果您使用的是C ++ 11,请改为包含C ++标题<cstdint>
。