我正在处理一些遗留的 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/