如何在C const struct中对两个变量进行操作?

vngu2lb8  于 2023-10-16  发布在  其他
关注(0)|答案(2)|浏览(116)

在c语言的const结构中有什么方法可以将两个const值相乘?
举例说明:

typedef struct
    {  
        uint16_t column;
        uint16_t line;
        uint16_t full_string_screen_char_number;    
    }font_type_t;     
    
    
    const font_type_t arial_32x24_def =
    {
        .column = 13,
        .line = 7,
        .full_string_screen_char_number = (.column) * (.line),  // 91    
    };

编译器显示错误(错误:“.”标记前应为表达式)。
编译器:xc16 v2.10(基于gcc)

ws51t4hk

ws51t4hk1#

在初始化器中,可以使用对象的名称来引用结构的成员:

const font_type_t arial_32x24_def =
    {
        .column = 13,
        .line = 7,
        .full_string_screen_char_number = arial_32x24_def.column * arial_32x24_def.line    
    };

然而,这是不可用的代码,因为C 2018 6.7.9 23说求值顺序是未指定的:
初始化列表表达式的求值相对于彼此不确定地排序,因此未指定任何副作用发生的顺序。
您应该编写代码,使初始值依赖于一些公共的先前值,而不是结构的其他成员。

4ioopgfo

4ioopgfo2#

不能有效地引用初始化列表中的其他结构成员。
你可以用宏来做这件事。

#define FONT_DECL(VAR, COLUMN, LINE) \
const font_type_t VAR = { \
    .column = COLUMN, \
    .line = LINE, \
    .full_string_screen_char_number = ((COLUMN) * (LINE)) \
}

FONT_DECL(arial_32x24_def, 13, 7);

相关问题