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
    Membre averti
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    41
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 41
    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
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    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
    Membre averti
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    41
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 41
    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 expérimenté
    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 : 41
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 152
    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
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 472
    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
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    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 830
    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...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 41
    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
    Membre averti
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    41
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 41
    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
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    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 830
    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...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Membre émérite 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
    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