“What’s your go-to tool as a programmer these days?”

My brain, same as it always has been!

🤭

This guy is a gold mine

      • Dumhuvud@programming.dev
        link
        fedilink
        English
        arrow-up
        2
        ·
        3 days 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.

        • Dumhuvud@programming.dev
          link
          fedilink
          English
          arrow-up
          1
          ·
          edit-2
          3 days 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;