====== 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: [[programmazione:cpp:buone_pratiche|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
#include
#include
#include
#include
#include
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(&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.