IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Code source sans #<.h>


Sujet :

C

  1. #1
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    41
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 41
    Points : 39
    Points
    39
    Par défaut Code source sans #<.h>
    Je me demande si on peut faire un programme en C sans inclure aucune bibliothèque et si oui alors comment on peut afficher un texte dans l'écran ou saisir un texte au clavier ??

  2. #2
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    861
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 861
    Points : 716
    Points
    716
    Par défaut
    Je me demande si on peut faire un programme en C sans inclure aucune bibliothèque
    Oui. Mais, l'inclusion des ces fichiers .h permettant au programme de connaître l'interface avec des librairies, on aura des erreurs de compilation s'il l'on veut utiliser des fonctions de librairies. Ainsi, si l'on ne met pas
    alors on va avoir une erreur lorsque l'on va utiliser la fonction printf. Un programme en langage ne pouvant pas faire grand chose sans libraire.

    Ai-je correctement répondu à cette question quelque peu matinale ?

  3. #3
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    41
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 41
    Points : 39
    Points
    39
    Par défaut
    je sais bien l'utilité des bibliotheque mais je me demande comment créer une fonction assez simple comme scanf() ou printf() sans inclure stdio.h bien sure ou aucune autre bibliotheque.

  4. #4
    Membre actif
    Homme Profil pro
    Ingénierie des systemes embarqués temps réels
    Inscrit en
    Juin 2006
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénierie des systemes embarqués temps réels
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2006
    Messages : 152
    Points : 231
    Points
    231
    Par défaut
    Citation Envoyé par hello_world88 Voir le message
    je sais bien l'utilité des bibliotheque mais je me demande comment créer une fonction assez simple comme scanf() ou printf() sans inclure stdio.h bien sure ou aucune autre bibliotheque.
    heuh....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    // prototype
    void myScanf(...);
    void myPrintf(...);
     
    int main()
    {
    // appels des fonctions 
    return(0);
    }
    void myScanf()
    {
    // definir son comportement
    }
    void myPrintf();
    {
    // definir son comportement
    }
    tu peux aussi t'inspirer des travaux des Guru fprintf par exemple...
    Attention toute fois au autres includes qui sont appelés.

    bonne chance pour la réinvention de la roue

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 395
    Points : 23 759
    Points
    23 759
    Par défaut
    Bonjour,

    Pour compléter les réponses de Bayard et bi_turbo, tu peux dans un premier temps écrire un programme qui n'utilise aucune bibliothèque ni référence à des fichiers externes, simplement en renvoyant un code de retour :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int main (void)
    {
        return 42;
    }

    Ce programme retournera donc cette valeur comme code de fin de programme à ton système d'exploitation, que tu pourras alors évaluer avec $? sous un Shell Unix, ERROR_LEVEL sous D.O.S. ou avec l'appel système approprié si tu programmes en C et que tu lances ton processus depuis un autre. C'est une forme de communication. Tu remarqueras que ce programme n'inclut aucun header et qu'il compilera quand même en mode strict, avec tous les avertissements activés.

    Maintenant, pour approfondir ta question, « printf » n'est pas un mot-clé réservé du C. En désactivant toutes les options implicites (bien utiles quand on débute en C) et en retirant toutes les directives #include, ton compilateur finira par te dire « moi, printf(), 'connais pas. ». Par contre, c'est une fonction qui fait partie de la norme C, c'est-à-dire du minimum syndical qui doit être livré avec un compilateur, ce qui la rend portable, et te garantit qu'elle sera implémentée de la même façon partout. Avec un seul bémol tout de même : il faut que ce soit « possible ». Si c'est un micro-contrôleur que tu programmes en C, qu'il fonctionne en embarqué et qu'il n'est équipé d'aucun périphérique d'affichage, ou de sortie en général, alors printf() n'a pas de raison d'être et ne pourra pas être implémenté. Il se peut qu'elle le soit quand même, mais elle se contentera de revenir au programme principal sans renvoyer de code d'erreur.

    À présent, pour en venir au fait, si tu veux réécrire printf() à partir de zéro, il te faudra communiquer avec ton système d'exploitation. Donc, il faudra utiliser les appels système plutôt que les fonctions standard. En descendant un peu plus loin, si tu n'utilises pas les headers prédéfinis par ton O.S. pour utiliser ses appels système, il va falloir écrire un bout d'assembleur pour faire l'appel.

    Enfin, si tu te places au niveau du système d'exploitation lui-même et que tu veux savoir comment on écrit simplement un message à l'écran quand RIEN n'est chargé, et que le BIOS n'est pas disponible, et bien on dépose des valeurs en mémoire. Donc, depuis le C, ça revient à utiliser un pointeur vers la mémoire vidéo et à allumer un à un les pixels qui nous intéressent (ou directement les caractères si tu travailles en mode texte). Pour cela, il existe le forum « Assembleur → Programmation d'O.S » mais, à ce stade, ce n'est plus du C et cela demande d'avoir déjà l'expérience de la programmation.

    Bon courage.

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par hello_world88 Voir le message
    Je me demande si on peut faire un programme en C sans inclure aucune bibliothèque
    Oui
    Citation Envoyé par hello_world88 Voir le message
    et si oui alors comment on peut afficher un texte dans l'écran ou saisir un texte au clavier ??
    Ben ce sera à toi de réécrire les fonctions permettant de faire tout ça ; fonctions se trouvant dans les bibliothèques que tu ne veux pas utiliser...

  7. #7
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    41
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 41
    Points : 39
    Points
    39
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    pour utiliser ses appels système, il va falloir écrire un bout d'assembleur pour faire l'appel.
    Merci pour votre reponse,
    je veux savoir comment faire des appels systeme quand on est sous windows?

  8. #8
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    41
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 41
    Points : 39
    Points
    39
    Par défaut
    Citation Envoyé par bi_turbo Voir le message
    bonne chance pour la réinvention de la roue
    Merci pour votre encouragement,
    personnellement je préfère réinventer la roue que conduire une voture,

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par hello_world88 Voir le message
    Merci pour votre reponse,
    je veux savoir comment faire des appels systeme quand on est sous windows?
    Ah ben là t'es plus dans le bon fofo...

  10. #10
    Membre éclairé Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Points : 723
    Points
    723
    Par défaut
    Sous windows, les "syscall" sont des fonctions prefixe par NT, tu trouvera les prototypes dans winternl.h et les fonctions dans ntdll.dll
    Je ne vois pas pourquoi tu refuses les header pour prototyper les fonctions.

Discussions similaires

  1. Adapter ce code source sans thread
    Par Gregory666 dans le forum Débuter
    Réponses: 9
    Dernier message: 11/06/2013, 19h35
  2. Modifier des labels sans le code source
    Par Popof dans le forum WinDev
    Réponses: 2
    Dernier message: 12/07/2006, 11h21
  3. Réponses: 5
    Dernier message: 10/06/2006, 11h10
  4. Réponses: 2
    Dernier message: 03/05/2006, 15h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo