( uid_6201 | 2021. 03. 21., v – 23:08 )

Néhány alap példa. clang -O2 -Wall ... ahogy a legtöbbünk fordít alapból.

#include <stdio.h>

char *datagen() {
    return NULL;
}

int main() {
    printf("%s\n", datagen());
}

Rust esetén elkülönül az adatcsatorna a hibakezeléstől, nincs NULL pointer állapot:

fn datagen() -> Option<String> {
    None
}

fn main() {
    if let Some(adat) = datagen() {
        println!("{}", adat);
    } else {
        println!("Nincs adat.");
    }
}

És egy másik példa:

#include <stdio.h>
#include <string.h>

struct _teszt {
    char szia[4];
    char miez[4];
} teszt;

struct _teszt *datagen() {
    strcpy(teszt.szia, "szia");
    strcpy(teszt.miez, "MIEZ");
    return &teszt;
}

int main() {
    struct _teszt *t = datagen();
    printf("szia: %s\n", t->szia);
    printf("miez: %s\n", t->miez);
}

Rust esetén szintén nehéz hibázni, nem engedi az ilyesmit.

Egy kis malloc() oda nem figyelés. Sebaj valamelyi másik területre ráírunk. Tipikus codeinjection sérülékenység forrás:

#include <stdio.h>
#include <string.h>
#include <malloc.h>

struct _teszt {
    char szia[4];
    char miez[4];
};

void datagen(struct _teszt *teszt) {
    strcpy(teszt->szia, "szia");
    strcpy(teszt->miez, "MIEZ");
}

int main() {
    struct _teszt *t = malloc(4); // nem kevés?

    datagen(t);
    printf("szia: %s\n", t->szia);
    printf("miez: %s\n", t->miez);
    // aztán a free() elfelejtődik, a memória zabálódik.
}

Szintén C gyöngyszem, clang nem szól, ellenben a kimenet téves eredményt ad:

#include <stdio.h>
#include <string.h>
#include <malloc.h>

struct _teszt {
    char szia[4];
    char miez[4];
};

void datagen(struct _teszt *teszt) {
    strcpy(teszt->szia, "szia");
    strcpy(teszt->miez, "MIEZ");
    // ... pár művelet
    free(teszt); // kis túlbuzgóság a kolléga által elkövetve
}

int main() {
    struct _teszt *t = malloc(4); // nem kevés?

    datagen(t);
    printf("szia: %s\n", t->szia);
    printf("miez: %s\n", t->miez);
}

Ezek kicsiben viccesek, egy több fő által írt nagyobb projekt esetén a hetekig tartó bugvadászat már kevésbé vicces.
A C-t tudni kell uralni. Mindig, hibázás nélkül!