C语言是否可以这样:
typedef struct S {
char a;
int b;
int c = this.a * 60 + this.b;
} S;
这种类型的结构在我的代码中非常有用。
答案 0 :(得分:3)
不,在C
中,您无法在声明中分配记住值,这将是编译时错误。
但我可以建议一个解决方案(可能你也喜欢):
#define INIT(this, a, b) {a, b, (this).a * 60 + (this).b}
并称之为:
S s = INIT(s, '5', 6);
答案 1 :(得分:2)
不,但您可以创建一个为您进行初始化的工厂函数:
// With a name like alloc, it's clear that the
// user is responsible for freeing the memory allocated.
S* alloc_s(char a, int b) {
S* s = malloc(sizeof(S));
s->a = a;
s->b = b;
s->c = s->a * 60 + s->b;
return s;
}
答案 2 :(得分:1)
不,C中没有这样的功能(甚至在GNU C中也没有)。您不能拥有结构对象成员的默认值。
答案 3 :(得分:0)
static const int c = 666;
答案 4 :(得分:0)
如果不先知道a和b,就无法计算表达式。 你可以像这样模拟这个类:
#include <stdio.h>
#include <stdlib.h>
struct S;
typedef struct S {
char a;
int b;
int (*getC)(struct S* sss);
} S;
int getC(S* sss) { return sss->a*60+sss->b; }
S* make_S()
{
S* p = (S*)malloc(sizeof(S));
if(p==NULL) return NULL;
p->getC = &getC;
return p;
}
int main()
{
S* s1 = make_S();
s1->a = 1;
s1->b = 2;
printf("%i\n", s1->getC(s1));
free(s1);
return 0;
}