c - 这些奇怪的宏定义是什么意思(它们是否正确?)

标签 c macros c-preprocessor

我正在处理一些遗留的 C 代码并且遇到了两个奇怪的宏定义。它们看起来不对,而且还导致一些编译器警告(警告:逗号表达式的左侧操作数无效),我花了好几个小时才最终找到这些宏。

谁能告诉我它们是否正确(我怀疑不是),如果不正确,我该如何解决?

#define MAX_MEMORY_BLOCK (sizeof(size_t)==2,65535,2147483647)
#define MAX_ARRAY_SIZE   (sizeof(size_t)==2,16384,1073741824)

最佳答案

它们包含逗号运算符;只有最后一个值“重要”,因此它们等同于:

#define MAX_MEMORY_BLOCK (2147483647)
#define MAX_ARRAY_SIZE   (1073741824)

或者,有人忘记了三元运算符使用 ?::

#define MAX_MEMORY_BLOCK (sizeof(size_t)==2 ? 65535 : 2147483647)
#define MAX_ARRAY_SIZE   (sizeof(size_t)==2 ? 16384 : 1073741824)

但是,sizeof(size_t) == 2 的现代系统很少(尽管可能有一些,尤其是在嵌入式计算领域)。

关于c - 这些奇怪的宏定义是什么意思(它们是否正确?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8776194/

相关文章:

c++ - 获取当前类的 typedef

gcc - 一站式完成GCC预处理器输出和编译

c - Yacc 找不到 YY_CURRENT_BUFFER

c - C 中打印数组的通用函数

python - 如何从可调用 View 渲染 Jinja2 宏?

c++ - Boost.预处理器: BOOST_PP_EQUAL not working

c - GCC#define 语句字节顺序错误

c - 拦截到自定义 UDP 服务器的系统日志日志流量

c++ - 编译器需要来自 OpenCL.lib 的损坏名称

macros - 语法规则不完全卫生?