gpt4 book ai didi

c - 宏常量中的 float 学,同时保持整数性

转载 作者:太空宇宙 更新时间:2023-11-04 06:31:27 27 4
gpt4 key购买 nike

我有一些像下面这样的宏:

#define THING_LENGTH (512)
#define MAX_COUNT (4096*8)
#define MAX_LENGTH ((int32)((float)(MAX_COUNT*THING_LENGTH)*1.5))

其中正在被替换:

typedef struct Writes {
char buf[MAX_LENGTH];
char buf2[MAX_COUNT];
...
} Writes;

给出这个预处理结果:

typedef struct Writes {
char buf[((int32)((float)((4096*8)*(512))*1.5))];
char buf2[(4096*8)];
...
} Writes;

哪个给我这个警告/错误:

variably modified ‘buf’ at file scope

在宏中维护 MAX_COUNT*THING_LENGTH*1.5 逻辑的最佳方法是什么,但它是否有效?并将所有常量保持为常量和整数?

最佳答案

只是不要在常量的数学运算中使用任何 float 。这里:

//---mul by 3, then div by 2
#define MAX_LENGTH ((MAX_COUNT*THING_LENGTH * 3) / 2 )

//---more optimized version
#define MAX_LENGTH_PARTIAL (MAX_COUNT*THING_LENGTH)
#define MAX_LENGTH (((MAX_LENGTH_PARTIAL << 1 ) + MAX_LENGTH_PARTIAL) >> 1 )

关于c - 宏常量中的 float 学,同时保持整数性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20086248/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com