可变地修改了,但是出错了,怎么办?

| 好的,我知道这可能很难看,但是我不明白为什么我不能使用
TILES_X
TILES_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段:   整数常量表达式应具有整数类型,并且仅应具有操作数   它们是整数常量,枚举常量,字符常量,sizeof   其结果是整数常量的表达式,而浮动常量是   强制转换的直接操作数。整数常量表达式中的强制转换运算符应仅   将算术类型转换为整数类型,但作为操作数的一部分除外   操作员。 (强调我的) 在大多数情况下,您不能在整数常量表达式中使用浮点数(这是数组维数所必需的)。 无论如何,为此目的使用浮点几乎肯定是错误的。切换到使用整数数学,一切都会正常。 编辑:例如,您应该乘以866,然后再除以1000,而不是乘以
0.866f
。     

要回复问题请先登录注册