Mat*_*att 4 c c++ macros limit c-preprocessor
我有以下代码(混合C/C++应用程序)
#include <stdint.h>
#define BUFFER_SIZE UINT16_MAX
Run Code Online (Sandbox Code Playgroud)
我期望BUFFER_SIZE(st)UINT16_MAX是在stdint.h中定义的(65535),但编译器抱怨UINT16_MAX没有定义.显然宏观扩张并没有像我想的那样发生.
我可以自己定义它(65535),但想知道为什么这不起作用.
回复几条评论:
我的编译器支持该uint16_t类型,并UINT16_MAX在stdint.h中定义
一个人提到了定义__STDC_LIMIT_MACROS- 在尝试包含stdint.h之前我已经尝试过定义它.
回答
所以它__STDC_LIMIT_MACROS更复杂.
__STDC_LIMIT_MACROS在包含stdint.h之前,我在此文件中有#define__STDC_LIMIT_MACROS未定义我的解决方案只是添加-D__STDC_LIMIT_MACROS到我的编译器参数.
正如您似乎在使用C++,您可能会这样做:
#define __STDC_LIMIT_MACROS
Run Code Online (Sandbox Code Playgroud)
来自/usr/include/stdint.h最近的Debian:
/* 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))
Run Code Online (Sandbox Code Playgroud)