47 votes

Que pouvez-vous faire en C sans "std" inclus? Font-ils partie de "C" ou simplement de bibliothèques?

Je m'excuse si c'est subjectif ou la répétition de la question. C'est une sorte de maladroit à la recherche, donc je n'étais pas sûr de ce que les termes à inclure.

Ce que je voudrais savoir est ce que la base de la fondation outils/fonctions en C lorsque vous n'avez pas inclure les bibliothèques standard comme stdio et stdlib.

Que pouvais-je faire si il n'y a pas d' printf(), fopen(), etc?

Aussi, sont ceux des bibliothèques techniquement partie du langage "C", ou sont-ils simplement très utile et efficace bibliothèques essentielles?

30voto

Steve Jessop Points 166970

La norme C a ceci à dire (5.1.2.3/5):

Au moins les exigences de conformité la mise en œuvre sont:

- Lors de la séquence de points, la volatilité des objets sont stables dans le sens que les précédentes les accès sont complètes et suivantes les accès n'ont pas encore eu lieu.

- À la fin du programme, toutes les données écrites dans les fichiers doivent être identiques pour le résultat que l'exécution de la selon le programme de l'abstrait la sémantique aurait produit.

- L'entrée et la sortie de la dynamique de les dispositifs interactifs lieu comme spécifié dans 7.19.3.

Donc, sans les fonctions de bibliothèque standard, le seul comportement d'un programme est la garantie d'avoir, concerne les valeurs de la volatilité des objets, parce que vous ne pouvez pas utiliser de la garantie de l'accès aux fichiers ou "dispositifs interactifs". "Pure C" ne fournit d'interaction via les fonctions de bibliothèque standard.

Pure C n'est pas toute l'histoire, bien que, depuis votre matériel pourrait avoir certaines adresses certaines choses lors de la lecture ou d'écriture (que ce soit un SATA ou bus PCI, raw vidéo mémoire, un port série, quelque chose à faire bip, ou un clignotement de la LED). Donc, de savoir quelque chose au sujet de votre matériel, vous pouvez faire beaucoup écrit en C sans utiliser les fonctions de bibliothèque standard. Potentiellement, vous pourriez mettre en œuvre la bibliothèque C standard, même si cela peut nécessiter l'accès à des instructions du PROCESSEUR ainsi que des adresses de mémoire.

Mais dans la pure C, sans les extensions, et les fonctions de bibliothèque standard supprimé, vous ne pouvez pas faire autre chose que de lire les arguments de ligne de commande, faire un peu de travail, et de renvoyer un code d'état d' main. Ce n'est pas être sous-estimées, il est toujours Turing sous réserve de limites de ressources, bien que votre seule ressource est automatique et variables statiques, pas de tas de répartition. Ce n'est pas très riche environnement de programmation.

Les bibliothèques standard font partie de la spécification du langage, mais dans n'importe quelle langue il a tendance à être une ligne tirée entre la langue "en tant que tel", et les bibliothèques. C'est une différence conceptuelle, mais finalement pas très important dans le principe, parce que la norme dit qu'ils viennent ensemble. Quelqu'un de faire quelque chose de non-standard pourrait tout aussi facilement supprimer des fonctionnalités de langage que les bibliothèques. De toute façon, le résultat n'est pas conforme mise en œuvre de C.

Note qu'un "autonome" de la mise en œuvre de C n'a qu'à mettre en œuvre un sous-ensemble de la norme comprend pas compris les I/O, de sorte que vous êtes dans la position que j'ai décrit ci-dessus, de s'appuyer sur le matériel-les extensions spécifiques pour obtenir quelque chose d'intéressant à faire. Si vous souhaitez établir une distinction entre le "langage de base" et "les bibliothèques", basé sur le standard, c'est peut-être un bon endroit pour dessiner la ligne.

13voto

plinth Points 26817

Que pourriez-vous faire? Tout!

Il n'y a pas de magie dans le C, sauf peut-être le préprocesseur.

Le plus dur, c'est peut-être pour écrire putchar - comme c'est dépendants de la plateforme d'e/s.

C'est un bon premier cycle de l'exercice pour créer votre propre version de varargs et une fois que vous avez que, faire votre propre version de vaprintf, puis printf et sprintf.

J'ai fait ensuite sur un Macintosh, en 1986, quand je n'étais pas heureux avec les routines stdio qui ont été fournis avec Lightspeed C - écrit mon propre gestionnaire de fenêtre avec win_putchar, win_printf, in_getchar, et win_scanf.

L'ensemble de ce processus est appelé amorçage et il peut l'un des plus gratifiant d'expériences dans le domaine du codage - travailler avec une base de la conception qui fait une bonne quantité de sens pratique.

8voto

Michael Burr Points 181287

Vous n'êtes certainement pas obligé d'utiliser les bibliothèques standard si vous n'avez pas besoin pour eux. Quelques systèmes embarqués n'ont pas de bibliothèque standard, de soutenir ou ne pouvez pas l'utiliser pour une raison ou une autre. La norme spécifiquement parle implémentations sans support de bibliothèque, standard C99 5.1.2.1 "Autoportant de l'environnement":

Dans un autoportant environnement (dont C l'exécution d'un programme peut avoir lieu sans l'avantage d'un système d'exploitation), le nom et le type de la fonction appelée au démarrage du programme sont définis par l'implémentation. Toutes les installations de la bibliothèque à la disposition d'un programme autonome, autres que le minimum requis par l'article 4, sont définis par l'implémentation.

Les en-têtes nécessaires par le C99 à être disponible dans un autoportant la mise en oeuvre sont <float.h>, <iso646.h>, <limits.h>, <stdarg.h>, <stdbool.h>, <stddef.h>, et <stdint.h>. Ces en-têtes ne définir que les types et les macros, donc il n'y a pas besoin d'une bibliothèque de fonctions pour les soutenir.

Sans la bibliothèque standard, vous êtes ensemble dépend de votre propre code, toute personne non-standard des bibliothèques qui peuvent être disponibles pour vous, et tout système d'exploitation système d'appels que vous pourriez être en mesure d'interface (qui pourrait être considéré comme non-standard de la bibliothèque des appels). Très probablement, vous devez avoir votre programme C à l'appel de l'assemblée des routines d'interface pour les périphériques et/ou quel que soit le système d'exploitation pourrait être sur la plate-forme.

2voto

WhirlWind Points 8305

Vous ne pouvez pas faire beaucoup de choses, comme la plupart des fonctions de bibliothèque standard compter sur le système d'appels; vous êtes limité à ce que vous pouvez faire avec la fonction intégrée dans le C des mots clés et des opérateurs. Elle dépend aussi du système; dans certains systèmes, vous pouvez être en mesure de manipuler des bits de façon que les résultats de certaines fonctions extérieures, mais il est susceptible d'être l'exception plutôt que la règle.

C est l'élégance est dans sa simplicité, cependant. À la différence de Fortran, qui comprend beaucoup de fonctionnalités dans le cadre de la langue, C est très dépendante de sa bibliothèque. Ce qui lui donne un plus grand degré de souplesse, au détriment de l'être un peu moins cohérent de plate-forme à plate-forme.

Cela fonctionne bien, par exemple, dans le système d'exploitation, où les séparer complètement des "bibliothèques" sont mis en œuvre, pour offrir les mêmes fonctionnalités avec une mise en œuvre à l'intérieur du noyau lui-même.

Certaines parties de la bibliothèques sont spécifiés en tant que partie de la norme ANSI C; ils font partie de la langue, je suppose, mais pas à sa base.

2voto

Uri Points 50687

Aucun d'eux ne fait partie de la langue des mots-clés. Cependant, tous les C distributions doivent inclure une mise en œuvre de ces bibliothèques. Cela garantit la portabilité de nombreux programmes.

Tout d'abord, vous pourriez théoriquement mettre en œuvre toutes ces fonctions vous-même en utilisant une combinaison de C et de l'assemblée, de sorte que vous pourrait théoriquement faire quoi que ce soit.

Dans la pratique, les fonctions de la bibliothèque sont principalement destinés à vous épargner le travail de réinventer la roue. Certaines choses (comme la chaîne et des fonctions de la bibliothèque) sont plus faciles à mettre en œuvre. D'autres choses (comme I/O) dépend en grande partie du système d'exploitation. La rédaction de votre propre version serait possible pour un O/S, mais il est en train de faire le programme moins portable.

Mais vous pouvez écrire des programmes qui font beaucoup de choses utiles (p. ex., calculer PI ou le sens de la vie, ou de simuler un automate). À moins que vous utilisés directement sur l'OS pour les I/O, cependant, il serait très difficile d'observer ce que la sortie est.

Au jour le jour de la programmation, le succès d'un langage de programmation généralement nécessite la disponibilité d'un utile standard de haute qualité de la bibliothèque et les bibliothèques pour de nombreuses tâches utiles. Ceux-ci peuvent être de première partie ou d'un tiers, mais ils ont d'être là.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X