C: struct 声明中是否允许成员之间的操作?

ZKK

我正在尝试使用结构来表示具有三个属性的对象,但第三个属性依赖于前两个。所以,我基本上是这样尝试的:

typedef struct{
    int x;
    int y;
    int z = x + y;
}xyz_type;

但是我收到编译器错误。C 语言是否不支持这种行为,或者我是否缺少此类行为的正确语法?如果它不受支持,那么实现这样的目标的更好方法是什么?

预期行为:z 将使用其他两个初始化值的总和进行初始化,然后保持独立

克利福德

该结构定义了一个类型,而不是一个实例您不能为类型定义初始化。为此,您需要一个像 C++ 提供构造函数,而不是 C。

但是,您可以在结构自己的初始化程序中引用结构实例:

typedef struct
{
    int x;
    int y;
    int z;
} xyz_type ;

xyz_type instance = 
         { 10,                         // x = 10
           5,                          // y = 5
           instance.x + instance.y } ; // z = 15


instance.x = 0 ; // x = 0, z is unchanged

您可以明确说明在初始化程序中分配了哪些成员:

xyz_type instance = { .x=10, 
                      .y=5,
                      .z=instance.x+instance.y} ;

这是在与其他成员更复杂的结构是有用的,但顺序保持临界-成员在它们在所定义的顺序分配struct定义,而不是它们出现在初始化剂的顺序,所以z在这种情况下必须被定义两者xy

这不等同于构造函数,因为它必须在每次实例化时显式编码。可以通过编写宏在一定程度上自动化初始化。例如:

#define XYZ_INIT( xinit, yinit ) {.x=(xinit),\
                                  .y=(yinit),\
                                  .z=(xinit)+(yinit)}

然后;

xyz_type instance = XYZ_INIT( 10, 5 ) ;

由于宏可能有问题,并且不是类型安全的,您可能更喜欢下面的初始化函数:

xyz_type create_xyz(int x, int y) 
{ 
    return (xyz_type){ .x = x, .y = y, .z = x + y }; 
}

然后:

xyz_type instance = create_xyz( 10, 5 ) ;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++中的struct中的struct

来自分类Dev

C ++中的struct对齐

来自分类Dev

引用可能指向C ++中的struct成员

来自分类Dev

这些c struct声明之间的区别?

来自分类Dev

C struct是否符合ABI?

来自分类Dev

C ++将struct成员作为参数传递

来自分类Dev

在C中结合Struct + malloc

来自分类Dev

从C的struct数组中检索struct for qsort

来自分类Dev

C中的Mmap和struct

来自分类Dev

struct C ++中的类指针

来自分类Dev

指向C中的struct的指针

来自分类Dev

C ++中具有相同名称但成员不同的struct

来自分类Dev

C中包含struct的struct中的字节分配

来自分类Dev

比较typedef struct的函数参数与其在C中的实例声明

来自分类Dev

清除struct,它是C ++中的类的成员

来自分类Dev

C ++检查struct是否为空

来自分类Dev

Struct和Classs成员结构C ++

来自分类Dev

C ++的main.cpp中的Struct声明问题

来自分类Dev

要从C中的struct内存访问类型的struct指针的数据

来自分类Dev

C中的struct malloc问题

来自分类Dev

C-帮助打印返回的Struct的成员

来自分类Dev

比较C ++中的struct

来自分类Dev

无法在C中的struct中声明指向struct的指针数组

来自分类Dev

传递struct成员以在c中起作用

来自分类Dev

在C ++中按struct成员对列表进行排序

来自分类Dev

C 中的 typedef struct AA

来自分类Dev

C:'struct Table *const' 和'const struct Table *' 之间的区别?

来自分类Dev

c struct size with void * value 成员

来自分类Dev

在 C++ 中访问 c-struct