Mélanger du code C avec du code C++

a marqué ce sujet comme résolu.
Auteur du sujet

Bonjour,

Je souhaite écrire un programme en C++ qui affiche l’heure et la date à laquelle il s’exécute.

J’ai écrit ce bout de code à partir de la documentation :

#include <iostream>
#include <ctime>

using std::cout;
using std::endl;

int main()
{
    time_t rawtime;
    time(&rawtime);

    // Programme exécuté le : Sat Mar 28 15:48:01 2020
    cout << "Programme exécuté le : " << ctime (&rawtime) << endl;
    return 0;
}

Ce que je constate, c’est que le code est initialement écrit en C.
Dès lors, a-t-il sa place dans un programme en C++ ?
Existe-t-il une variante C++ de ce morceau de code ?

Je pose cette question parce qu’on sera noté sur les bonnes pratiques de programmation en C++.
Merci.

+0 -0
Auteur du sujet

Dans la même optique, utiliser printf() dans un code en C++, est-ce « choquant » ?
Cette fonction est bien plus pratique que cout pour formater du texte, j’aimerais l’utiliser.

+0 -0

Cette réponse a aidé l’auteur du sujet

Salut,

Le C++ inclut toute la bibliothèque C de base, même si un C++ peut être valide en C, ça reste du C++.

Néanmoins en C++, on aura plus tendance à se servir du namespace std, y compris pour les fonctions importées du C.

Utilise donc std::time et std::ctime pour rendre le code plus C++-esque :)

Édité par Lynix

Nazara Engine (Moteur de jeu amateur en C++) - Je streame de la programmation en C++ sur Twitch ! - Rejoignez le Discord NaN ! (Chat dédié à la programmation)

+0 -0

J’avais retenu que le formatage et la manipulation des dates restait assez catastrophique en C++, que la bibliothèque d’Howard Hinnant était ce que l’on avait de plus propre et d’avancé (car put_time… comment dire….)

Bref, ce n’est pas un sujet que j’avais suivi. C’est sa lib qui a servi de base à l’ajout dans le C++20?

Quant à printf(), je m’en sers sur godbolt pour avoir moins de bruit qu’avec les flux. Sinon, {fmt} (et spdlog) qui rejoint le C++20 est un pas dans la bonne direction: un pseudo-printf qui est type-safe, et DRY.

Édité par lmghs

+0 -0

C’est sa lib qui a servi de base à l’ajout dans le C++20?

Oui, pour date.h et tz.h avec de légère modification.

Et {fmt} pour std::format. Mais les interfaces sont un peu différentes, avec moins de chose, par exemple, pas de moyen de vérifier le format à la compilation (FMT_STRING), ni de version fmt::printf (pour le coup, je suis surpris et déçus).

car put_time… comment dire….)

Quel est son problème ? (À partir du moment où on a la structure tm)

+0 -0
Auteur du sujet

Merci, j’ai pris en compte vos propositions pour rendre le code davantage C++ friendly  :

#include <iostream>
#include <ctime>
#include <iomanip>

using std::cout;
using std::endl;

int main()
{
    std::time_t   current_time   =   std::time(nullptr);
    std::tm*      UTC_time       =   gmtime(&current_time);
    
    cout    << "Programme exécuté le : "
            << std::put_time(UTC_time, "%a, %e %b %Y %T UTC")
            << endl;

    return 0;
}

Est-ce bien comme cela que vous feriez pour afficher la date & heure d’exécution d’un programme en C++ ?

+0 -0

Cette réponse a aidé l’auteur du sujet

Je ne pense pas qu’il y ai plus simple.

    return 0;

Peut-être :

    return EXIT_SUCCESS;

ache.one                 🦹         👾                                🦊

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte