Hom*_*lli 3 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)
Run Code Online (Sandbox Code Playgroud)
它们包含逗号运算符; 只有最后一个值'计数',所以它们相当于:
#define MAX_MEMORY_BLOCK (2147483647)
#define MAX_ARRAY_SIZE (1073741824)
Run Code Online (Sandbox Code Playgroud)
或者,有人忘记了三元运算符使用?:
:
#define MAX_MEMORY_BLOCK (sizeof(size_t)==2 ? 65535 : 2147483647)
#define MAX_ARRAY_SIZE (sizeof(size_t)==2 ? 16384 : 1073741824)
Run Code Online (Sandbox Code Playgroud)
然而,现代系统很少sizeof(size_t) == 2
(虽然可能有一些,特别是在嵌入式计算领域).