464
submitted 1 week ago* (last edited 4 days ago) by danhab99@programming.dev to c/programmer_humor@programming.dev

"What's your go-to tool as a programmer these days?"

My brain, same as it always has been!

you are viewing a single comment's thread
view the rest of the comments
[-] lunarul@lemmy.world 6 points 1 week ago

Unless you're programming in assembly

[-] Dumhuvud@programming.dev 2 points 1 week ago

I mean, in C too.

I used it when I wrote some throwaway C++ code working with SQLite. Since it had no RAII (and I had no intention of writing my own wrapper), I had to manually cleanup multiple resources somehow. If at least one resource failed to initialize, I had to deinitialize the ones that didn't fail. It was either goto or a bunch of flags to track what is initialized. goto looked more elegant.

[-] jwmgregory@lemmy.dbzer0.com 1 points 1 week ago

even if the flags look less elegant you really want to avoid using goto’s in pretty much every context in modern C. it basically only exists for backwards compatibility purposes, so all our shit from 1999 doesn’t go up in flames. it is considered bad practice to use it now because it really complicates the control flow logic and it is much less modular/portable.

i don’t understand thinking using flags would be less elegant, either. wouldn’t you rather have a neat list of everything for garbage collection purposes than having to search through goto statements thrown all around the code?

either way, if you’re in this situation in the first place, you’re writing bad C code. memory management should never manifest in implementation like this.

[-] Dumhuvud@programming.dev 1 points 1 week ago* (last edited 1 week ago)

I misremembered the whole thing. It was still related to cleaning up after a failure, but there was only one resource I had to deal with. That's how it looks like:

    sqlite3 *db;
    int r;

    r = sqlite3_open("./data.db", &db);
    if (r) {
        std::cerr << "Can't open the database: " << sqlite3_errmsg(db) << std::endl;
        return r;
    }

    r = sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS foo(...);", nullptr, nullptr, nullptr);
    if (r != SQLITE_OK) {
        std::cerr << "Can't create a table called foo: " << sqlite3_errmsg(db) << std::endl;
        goto out;
    }

    // a few more sqlite3_exec calls;
    // some sqlite3_prepare_v2 calls combined with sqlite3_bind_* and sqlite3_step calls
    // for repeated queries.

out:
    sqlite3_close(db);
    return r;
[-] librekitty@lemmy.today 1 points 1 week ago
[-] lunarul@lemmy.world 2 points 1 week ago

Yeah, it's not called goto, but it's functionally the same.

this post was submitted on 01 Sep 2025
464 points (98.9% liked)

Programmer Humor

26265 readers
2023 users here now

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

founded 2 years ago
MODERATORS