Strumenti Utente

Strumenti Sito


programmazione:cpp:appunti_cpp

Alcuni veloci appunti su C++

Autore: Fabio Di Matteo
Ultima revisione: 10/09/2026 13:45

Ho fatto alcune pagine simili su Rust e Go, quindi perchè non farle anche su C++. Si preferirà uno standard moderno.

Buone pratiche

Dato che il C/C++ offrono massima libertà nella gestine della memoria, possono (e non devono) essere pericolosi . Dunque ho raccolto alcune buone pratiche da tenere a mente qui: Buone pratiche di programmazione in C/C++

Try/catch

try {
       ...le mie istruzioni...
    } 
    catch (const std::exception& e) {
        // Intercetta std::exception e tutte le sue classi derivate
        std::cerr << "Errore intercettato: " << e.what() << std::endl;
    } 
    catch (...) {
        // Il "catch-all" intercetta qualsiasi cosa che non sia derivata da std::exception
        std::cerr << "Errore sconosciuto: è stata lanciata un'eccezione non standard." << std::endl;
    }

Thread

Lanciare un thread e proseguire col thread principale.

std::thread mio_thread([] {
        std::cout << "Eseguito in un thread separato\n";
    });

Determinare se una porta tcp è aperta o no

La funzione ritorna true se è aperta false altrimenti.

#include <arpa/inet.h>
#include <sys/socket.h>
#include <unistd.h>
 
#include <cstdlib>
#include <chrono>
#include <thread>
 
 
bool is_port_ready(const char* host, int port) {
    int socket_fd = socket(AF_INET, SOCK_STREAM, 0);
    if (socket_fd < 0)
        return false;
 
    sockaddr_in address{};
    address.sin_family = AF_INET;
    address.sin_port = htons(port);
 
    if (inet_pton(AF_INET, host, &address.sin_addr) != 1) {
        close(socket_fd);
        return false;
    }
 
    bool is_ready = connect(
        socket_fd,
        reinterpret_cast<sockaddr*>(&address),
        sizeof(address)
    ) == 0;
 
    close(socket_fd);
    return is_ready;
}

Si potrebbe usare così:

...
 
        std::thread server([&] {
            mioservertcp.run(); //server di esempio
        });
 
        // Attende che abbia aperto la porta
        while (!is_port_ready("127.0.0.1", 8080)) {
            std::this_thread::sleep_for(std::chrono::milliseconds(10));
        }
 
        // A questo punto il server è raggiungibile
        std::system("xdg-open http://127.0.0.1:8080/fmt");
 
        server.join();

Il mio server tcp viene eseguito su un thread esterno e il main attende 10 millisecondi finchè la porta non sia disponibile. Quando è disponibile in questo caso lancia un browser su quell'indirizzo. Infine aspettiamo che il thread termini.

programmazione/cpp/appunti_cpp.txt · Ultima modifica: 15/09/2026 18:52 da Fabio Di Matteo