Skip to content

7.2. Structs ​

The majority of libraries receive structs passed by reference, and it is also the default behaviour of Vala to pass structs by reference. So to pass a struct as an argument in a function or method call, you just need to specify the type of struct and the variable name. For example, the C code:

c
typedef struct foo {
    int x;
    int y;
};
void compute_foo(foo *f);

would be bound as:

vala
[CCode (cname = "foo", has_type_id = false)]
public struct Foo {
    public int x;
    public int y;
};
void compute_foo (Foo f);

Very rarely, a C library function is written to receive a struct passed by value and not reference. You will see the struct keyword used in the C function's parameter. You may also see const struct. To get Vala to pass the struct by value the [SimpleType] annotation needs to be added to the Vala binding of the struct. The following pattern in C:

c
typedef struct foo {
    int x;
    int y;
};
void compute_foo(struct foo f);

would be bound as:

vala
[CCode (cname = "foo", has_type_id = false)]
[SimpleType]
public struct Foo {
    public int x;
    public int y;
}
void compute_foo (Foo f);