Post

C vs. C++ com Exemplos

Structs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// em C (precisamos de typedef)
typedef struct {
    int x, y;
} Vec2f;

// em C++
struct Vec2f {
    int x, y;
};

Vec2f test_struct()
{
    // inicializacao em C++
    Vec2f vec = {};
    Vec2f vec;
    vec.x = 10;
    vec.y = 20;
	
    // Em C, ao tentar inicializar uma struct com todas as propriedades 
    // zeradas precisamos passar o zero.
    Vec2f _vec = {0};

    //
    // Em C, outras maneiras de iniciar
    //
    Vec2f vec2 = {22, 33};
    Vec2f vec3 = {.y = 22, .x = 33}; // inicializacao parametrizada (só funciona em C99)


    // Em C, uma struct PURA é definida dessa maneira e para nomearmos ela como no C++,
    // precisamos do typedef
    // OBS.: Nao usamos assim. Isto é para fins didáticos!
    struct {int x, y;} z;
    z.x = 30;
    z.y = 40;

    printf("x is %d, y is %d\n", z.x, z.y);
    printf("x is %d, y is %d\n", vec2.x, vec2.y);
    printf("x is %d, y is %d\n", vec3.x, vec3.y);

    // Em C
    // Maneira enxuta de iniciar um bloco struct, com parametros nomeados e já retorná-los
    return (Vec2f) {
        .x = vec3.x,
        .y = vec3.y
    };

}
Esta postagem está licenciada sob CC BY 4.0 pelo autor.