我有如下代码(混合 C/C++ 应用程序)
#include <stdint.h>
#define BUFFER_SIZE UINT16_MAX
我期望BUFFER_SIZE
(65535) 像UINT16_MAX
在 stdint.h 中定义的那样,但编译器却抱怨UINT16_MAX
未定义。显然,宏扩展并没有像我希望的那样发生。
我可以自己将其定义为 (65535) 但想知道为什么这不起作用。
回应几个评论:
我的编译器确实支持该
uint16_t
类型并UINT16_MAX
在 stdint.h 中定义一个人提到了定义
__STDC_LIMIT_MACROS
——我在包含 stdint.h 之前尝试过定义它无效。
回答
所以它是__STDC_LIMIT_MACROS
但更复杂的。
- #define 在头文件中(包括 stdint.h)
__STDC_LIMIT_MACROS
在包含 stdint.h 之前,我在这个文件中有 #define- 我将该头文件包含在另一个源文件中。这个其他源文件也是#include stdint.h 并且在包含我的标题之前这样做了。因此,首次包含 stdint.h 时
__STDC_LIMIT_MACROS
未定义
我的解决方案只是添加-D__STDC_LIMIT_MACROS
到我的编译器参数中。