gpt4 book ai didi

c - 可变修改,但错误,如何?

转载 作者:太空宇宙 更新时间:2023-11-04 01:40:25 25 4
gpt4 key购买 nike

好吧,我知道这可能很难看,但我不明白为什么我不能使用TILES_XTILES_Y TILES_TOTAL 作为全局数组长度,GCC 提示它“在文件范围内可变修改”。

    /* How many points should be in each tile? */
/* NOTE: MUST BE POWER OF TWO */
#define TILE_WIDTH 32
#define TILE_HEIGHT TILE_WIDTH
#define TILE_AREA ( TILE_WIDTH * TILE_HEIGHT )

/* How far should the origin of each tile be spaced? */
#define TILE_OFFSET_X TILE_WIDTH
#define TILE_OFFSET_Y ( TILE_HEIGHT * 0.866f )

/* Relative to the origin, where does the tile really end? */
#define TILE_MIN_X 0.0f
#define TILE_MIN_Y 0.0f
#define TILE_MAX_X ( TILE_OFFSET_X + 0.5f )
#define TILE_MAX_Y ( TILE_OFFSET_Y + 0.5f )

/* How many tiles should be cached offscreen? */
#define TILE_BLEED 2

#define CAMERA_WIDTH 256.0f
#define CAMERA_HEIGHT 192.0f

#define TILES_X ( ( size_t ) ( ( float ) ( ( CAMERA_WIDTH * 2.0f ) + ( TILE_BLEED * ( TILE_WIDTH + TILE_WIDTH ) ) ) / ( float ) TILE_OFFSET_X ) )
#define TILES_Y ( ( size_t ) ( ( float ) ( ( CAMERA_HEIGHT * 2.0f ) + ( TILE_BLEED * ( TILE_HEIGHT + TILE_HEIGHT ) ) ) / ( float ) TILE_OFFSET_Y ) )
#define TILES_TOTAL ( TILES_X * TILES_Y )

TILES_X expands to:
( ( size_t ) ( ( float ) ( ( 256.0f * 2.0f ) + ( 2 * ( 32 + 32 ) ) ) / ( float ) 32 ) )

哪个应该计算为常量,对吗?我的意思是,那里没有任何变量。如果我尝试用这个初始化器定义一个变量,它会再次提示它是如何被可变地修改的。我不知道怎么办。还有其他关于相同错误的帖子,但它总是使用枚举或定义而不是 const int 来解决。

最佳答案

根据 6.6,第 6 段:

An integer constant expression shall have integer type and shall only have operands that are integer constants, enumeration constants, character constants, sizeof expressions whose results are integer constants, and floating constants that are the immediate operands of casts. Cast operators in an integer constant expression shall only convert arithmetic types to integer types, except as part of an operand to the sizeof operator.

(强调我的)

在大多数情况下,您不能在整数常量表达式中使用 float (这是数组维度所必需的)。

无论如何,您为此目的使用 float 几乎肯定是错误的。切换到使用整数数学,一切都会正常进行。

编辑:例如,您不应乘以 0.866f,而应乘以 866,然后除以 1000。

关于c - 可变修改,但错误,如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6321983/

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