Il s'agit de la commande c99posix qui peut être exécutée dans le fournisseur d'hébergement gratuit OnWorks en utilisant l'un de nos multiples postes de travail en ligne gratuits tels que Ubuntu Online, Fedora Online, l'émulateur en ligne Windows ou l'émulateur en ligne MAC OS.
PROGRAMME:
Nom
c99 — compiler des programmes C standards
SYNOPSIS
c99 [Options...] chemin d'accès [[chemin d'accès] [-Je annuaire]
[−L annuaire] [−l bibliothèque]]...
DESCRIPTION
Le manuel de formation c99 l'utilitaire est une interface vers le système de compilation C standard ; il acceptera
code source conforme à la norme ISO C. Le système consiste conceptuellement en un
compilateur et éditeur de liens. Les fichiers d'entrée référencés par chemin d'accès opérandes et −l option-
les arguments doivent être compilés et liés pour produire un fichier exécutable. (Ce n'est pas précisé
si la liaison se produit entièrement dans le cadre de l'exploitation de c99; certaines implémentations peuvent
produisent des objets qui ne sont pas entièrement résolus jusqu'à ce que le fichier soit exécuté.)
Si la -c l'option est spécifiée, pour tous les opérandes de chemin d'accès du formulaire filet.c, les fichiers:
$(nom de base chemin d'accès .co
sera créé à la suite d’une compilation réussie. Si la -c l'option n'est pas
spécifié, il n'est pas précisé si un tel .o les fichiers sont créés ou supprimés pour le filet.c
opérandes.
S'il n'y a pas d'options qui empêchent la modification des liens (comme -c or −E), et tous les fichiers d'entrée
compiler et lier sans erreur, le fichier exécutable résultant doit être écrit conformément
à la -o fichier de sortie option (si présente) ou au fichier a.out.
Le fichier exécutable doit être créé comme spécifié dans Blog 1.1.1.4, Fichier Lire, Écrire,
et Création, sauf que les bits d'autorisation de fichier doivent être définis sur : S_IRWXO | S_IRWXG |
S_IRWXU
et les bits spécifiés par le umask du processus doit être effacé.
OPTIONS
Le manuel de formation c99 l'utilitaire doit être conforme au volume Base Definitions de POSIX.1‐2008, Blog
12.2, Services Publics Syntaxe Conseils et recommandations, excepté:
* Les options peuvent être entrecoupées d'opérandes.
* L'ordre de préciser le −L et −l options et l'ordre de spécification −l Options
par rapport à chemin d'accès les opérandes sont significatifs.
* Les demandes conformes doivent spécifier chaque option séparément ; c'est-à-dire l'option de regroupement
lettres (par exemple, −cO) n'a pas besoin d'être reconnu par toutes les implémentations.
Les options suivantes doivent être prises en charge :
-c Supprimer la phase d'édition des liens de la compilation et ne supprimer aucun objet
fichiers qui sont produits.
-D prénom[=Plus-value]
Définir prénom comme par un langage C #define directif. Si non =Plus-value est donné, un
la valeur 1 doit être utilisée. Le -D l'option a une priorité inférieure à celle de −U option.
Autrement dit, si prénom est utilisé à la fois dans un −U et -D option, prénom ne sera pas défini
quel que soit l’ordre des options. Définition supplémentaire de l'implémentation prénoms
peut être fourni par le compilateur. Les implémentations doivent prendre en charge au moins 2048
octets de -D définitions et 256 noms.
−E Copiez les fichiers source en langage C sur la sortie standard, en développant tous les préprocesseurs
directives; aucune compilation ne sera effectuée. Si un opérande n'est pas un texte
fichier, les effets ne sont pas spécifiés.
-g Produire des informations symboliques dans l'objet ou les fichiers exécutables ; la nature de
ces informations ne sont pas spécifiées et peuvent être modifiées par la mise en œuvre définie
interactions avec d'autres options.
-Je annuaire
Changer l'algorithme de recherche des en-têtes dont les noms ne sont pas absolus
chemins à rechercher dans le répertoire nommé par le annuaire chemin d'accès avant
en regardant aux endroits habituels. Ainsi, les en-têtes dont les noms sont entourés de doubles
devis ("") doit être recherché d'abord dans le répertoire du fichier avec le
#comprendre ligne, puis dans les répertoires nommés dans -Je options, et dernier dans l'habituel
lieux. Pour les en-têtes dont les noms sont placés entre crochets ("<>") et de
l'en-tête doit être recherché uniquement dans les répertoires nommés dans -Je options puis dans
les lieux habituels. Répertoires nommés dans -Je les options doivent être recherchées dans l’ordre
spécifié. Si la -Je L'option est utilisée pour spécifier un répertoire qui est l'un des
lieux habituels recherchés par défaut, les résultats ne sont pas précisés. Implémentations
doit prendre en charge au moins dix instances de cette option en un seul c99 commander
invocation.
−L annuaire
Changer l'algorithme de recherche des bibliothèques nommées dans le −l des objets à
regardez dans le répertoire nommé par le annuaire chemin avant de regarder dans le
lieux habituels. Répertoires nommés dans −L les options doivent être recherchées dans l’ordre
spécifié. Si la −L L'option est utilisée pour spécifier un répertoire qui est l'un des
lieux habituels recherchés par défaut, les résultats ne sont pas précisés. Implémentations
doit prendre en charge au moins dix instances de cette option en un seul c99 commander
invocation. Si un répertoire spécifié par un −L l'option contient des fichiers avec des noms
en commençant par l'une des chaînes "libc.", "libl.", "libpthread.", "libm.",
"libre.", "libtrace.", "libxnet.", ou "liby.", les résultats ne sont pas précisés.
−l bibliothèque
Rechercher la bibliothèque nommée bibliothèque.a. Une bibliothèque doit être fouillée lorsque son
nom est rencontré, donc le placement d'un −l l’option est importante. Plusieurs
les bibliothèques standard peuvent être spécifiées de cette manière, comme décrit dans le document EXTENDED
Rubrique DESCRIPTION. Les implémentations peuvent reconnaître les éléments définis par l'implémentation
suffixes autres que .a comme désignant les bibliothèques.
-O niveau opt
Spécifiez le niveau d'optimisation du code. Si la niveau opt option-argument est le
chiffre «0 ', toutes les optimisations de code spéciales doivent être désactivées. Si c'est le chiffre
«1 ', la nature de l'optimisation n'est pas précisée. Si la -O l'option est omise,
la nature de l'optimisation par défaut du système n'est pas précisée. Il est
non spécifié si le code généré en présence du -O 0 option est la
même que celui généré lorsque -O est omis. Autre niveau opt les valeurs peuvent être
prise en charge.
-o fichier de sortie
Utiliser le chemin d'accès fichier de sortie, au lieu de la valeur par défaut a.out, pour le fichier exécutable
produit. Si la -o l'option est présente avec -c or −E, le résultat n'est pas spécifié.
-s Produire des fichiers objets ou exécutables, ou les deux, à partir desquels symboliques et autres
informations non nécessaires à la bonne exécution à l'aide du exec famille définie dans
le volume Interfaces système de POSIX.1‐2008 a été supprimé (dépouillé). Si
tous les deux -g et -s des options sont présentes, l'action entreprise n'est pas spécifiée.
−U prénom Supprimer toute définition initiale de prénom.
Plusieurs instances de la -D, -Je, −L, −let −U des options peuvent être spécifiées.
OPÉRANDES
La demande doit garantir qu'au moins un chemin d'accès l'opérande est spécifié. Le
formulaires suivants pour chemin d'accès les opérandes doivent être pris en charge :
fichier.c Un fichier source en langage C à compiler et éventuellement lié. L'application
doit s'assurer que l'opérande est de cette forme si le -c option est utilisée.
fichier.a Une bibliothèque de fichiers objets généralement produits par le ar utilitaire, et passé
directement à l'éditeur de liens. Les implémentations peuvent reconnaître l'implémentation-
suffixes définis autres que .a comme désignant les bibliothèques de fichiers objets.
fichier.o Un fichier objet produit par c99 -c et transmis directement à l'éditeur de liens.
Les implémentations peuvent reconnaître des suffixes définis par l'implémentation autres que .o as
désignant les fichiers objets.
Le traitement des autres fichiers est défini par l'implémentation.
STDIN
Non utilisé.
CONTRIBUTION DES DOSSIERS
Chaque fichier d'entrée doit être l'un des éléments suivants : un fichier texte contenant une source en langage C
programme, un fichier objet au format produit par c99 -c, ou une bibliothèque de fichiers objets, dans
le format produit en archivant zéro ou plusieurs fichiers objets, en utilisant ar. Les implémentations peuvent
fournir des utilitaires supplémentaires qui produisent des fichiers dans ces formats. Fichier d'entrée supplémentaire
les formats sont définis par l’implémentation.
ENVIRONNEMENT VARIABLES
Les variables d'environnement suivantes doivent affecter l'exécution de c99:
LANGUE Fournissez une valeur par défaut pour les variables d'internationalisation qui ne sont pas définies ou
nul. (Voir le volume Définitions de base de POSIX.1‐2008, Blog 8.2,
Internationalisation Variables pour la priorité de l'internationalisation
variables utilisées pour déterminer les valeurs des catégories de paramètres régionaux.)
LC_TOUS S'il est défini sur une valeur de chaîne non vide, remplace les valeurs de tous les autres
variables d'internationalisation.
LC_CTYPE Déterminer la localisation pour l'interprétation des séquences d'octets de données de texte
sous forme de caractères (par exemple, des caractères à un octet par opposition aux caractères à plusieurs octets dans
arguments et fichiers d'entrée).
LC_MESSAGES
Déterminez les paramètres régionaux qui doivent être utilisés pour affecter le format et le contenu de
messages de diagnostic écrits dans l'erreur standard.
NLSPATH Déterminer l'emplacement des catalogues de messages pour le traitement des LC_MESSAGES.
TMPDIR Fournissez un nom de chemin qui doit remplacer le répertoire par défaut pour une utilisation temporaire.
fichiers, le cas échéant. Sur les systèmes conformes à XSI, fournissez un nom de chemin qui doit
remplacez le répertoire par défaut pour les fichiers temporaires, le cas échéant.
ASYNCHRONE ÉVÈNEMENTS
Par défaut.
SORTIE STD
Si plus d'un chemin d'accès opérande se terminant par .c (ou éventuellement d'autres suffixes non spécifiés) est
étant donné, pour chacun de ces fichiers :
"%s :\n", <chemin d'accès>
peut être écrit. Ces messages, s'ils sont écrits, doivent précéder le traitement de chaque entrée
déposer; ils ne doivent pas être écrits dans la sortie standard s'ils sont écrits dans la sortie standard
erreur, comme décrit dans la section STDERR.
Si la −E est spécifiée, la sortie standard doit être un fichier texte qui représente
les résultats de l'étape de prétraitement du langage ; il peut contenir des informations supplémentaires
approprié pour les passes de compilation ultérieures.
STDERR
L'erreur standard ne doit être utilisée que pour les messages de diagnostic. Si plus d'un chemin d'accès
opérande se terminant par .c (ou éventuellement d'autres suffixes non spécifiés) est donné, pour chacun de ces
fichier:
"%s :\n", <chemin d'accès>
peut être écrit pour permettre l'identification des messages de diagnostic et d'avertissement avec le
fichier d’entrée approprié. Ces messages, s'ils sont écrits, précéderont le traitement de chaque
fichier d'entrée ; ils ne doivent pas être écrits à l'erreur type s'ils sont écrits à l'erreur type
sortie standard, comme décrit dans la section STDOUT.
Cet utilitaire peut produire des messages d'avertissement concernant certaines conditions qui ne justifient pas
renvoyer une valeur de sortie d'erreur (non nulle).
SORTIE DES DOSSIERS
Les fichiers objets ou les fichiers exécutables, ou les deux, sont produits dans des formats non spécifiés. Si la
chemin d'accès d'un fichier objet ou d'un fichier exécutable à créer par c99 se résout à un existant
entrée de répertoire pour un fichier qui n'est pas un fichier normal, il n'est pas précisé si c99 doit
tenter de créer le fichier ou doit émettre un diagnostic et quitter avec une sortie différente de zéro
état.
ÉLARGI DESCRIPTION
Standard Bibliothèques
Le manuel de formation c99 le service public doit reconnaître ce qui suit −l options pour les bibliothèques standards :
−l c Cette option doit rendre disponible toutes les interfaces référencées dans le Système
Volume des interfaces de POSIX.1‐2008, à l'exception possible de celles
interfaces répertoriées comme résidant dans , , , ,
, , , , , ,
, , , , pthread_kill(), et
pthread_sigmask() dans , , interfaces marquées comme facultatives dans
, interfaces marquées comme ADV (Advisory Information) dans et
interfaces commençant par le préfixe clock_ ou time_ dans . Cette option
ne sera pas tenu d'être présent pour provoquer une recherche dans cette bibliothèque.
−l l Cette option doit rendre disponible toutes les interfaces requises par le langage C
sortie de lex qui ne sont pas mis à disposition via le −l c option.
−l fil de discussion
Cette option doit rendre disponible toutes les interfaces référencées dans et
pthread_kill() et pthread_sigmask() référencé dans . Un
l'implémentation peut effectuer une recherche dans cette bibliothèque en l'absence de cette option.
−l m Cette option doit rendre disponible toutes les interfaces référencées dans ,
et . Une implémentation peut rechercher cette bibliothèque dans le
absence de cette option.
−l rt Cette option doit rendre disponible toutes les interfaces référencées dans ,
, , et , interfaces marquées comme
facultatif dans , interfaces marquées comme ADV (Advisory Information) dans
, et les interfaces commençant par le préfixe clock_ et time_ dans
. Une implémentation peut effectuer une recherche dans cette bibliothèque en l'absence de cette
option.
−l tracer Cette option doit rendre disponible toutes les interfaces référencées dans . Un
l'implémentation peut effectuer une recherche dans cette bibliothèque en l'absence de cette option.
−l xnet Cette option doit rendre disponible toutes les interfaces référencées dans ,
, , et . Une mise en œuvre
peut effectuer une recherche dans cette bibliothèque en l'absence de cette option.
−l y Cette option doit rendre disponible toutes les interfaces requises par le langage C
sortie de yacc qui ne sont pas mis à disposition via le −l c option.
En l'absence d'options inhibant l'invocation de l'éditeur de liens, telles que -c or −E,
le c99 l'utilité doit entraîner l'équivalent d'un −l c option à transmettre au lien
éditeur après le dernier chemin d'accès opérande ou −l option, ce qui entraîne sa recherche après tout
d'autres fichiers objets et bibliothèques sont chargés.
Il n'est pas précisé si les bibliothèques libc.a, lib.a, libm.a, libpthread.a, librt.a,
libtrace.a, libxnet.a, ou Libye existent sous forme de fichiers normaux. La mise en œuvre peut accepter comme
−l arguments d'option noms d'objets qui n'existent pas sous forme de fichiers normaux.
Externe Symboles
Le compilateur C et l'éditeur de liens doivent prendre en charge la signification des symboles externes jusqu'à un
longueur d'au moins 31 octets ; l'action entreprise lors de la rencontre de symboles dépassant la
La longueur maximale des symboles définie par l'implémentation n'est pas spécifiée.
Le compilateur et l'éditeur de liens doivent prendre en charge un minimum de 511 symboles externes par source ou
fichier objet et un minimum de 4095 XNUMX symboles externes au total. Un message de diagnostic doit
être écrit dans la sortie standard si la limite définie par l'implémentation est dépassée ; autre
les actions ne sont pas précisées.
En-tête Rechercher
Si un fichier portant le même nom qu'un des en-têtes standards définis dans la Base
Volume des définitions de POSIX.1‐2008, Chapitre 13, En-têtes, non fourni dans le cadre du
mise en œuvre, est placé à l'un des endroits habituels recherchés par défaut pour
en-têtes, les résultats ne sont pas spécifiés.
Programmation Environnements
Toutes les implémentations doivent prendre en charge l'un des environnements de programmation suivants en tant que
défaut. Les implémentations peuvent prendre en charge plusieurs des programmations suivantes
environnements. Les applications peuvent utiliser configuration système() ou getconf pour déterminer quelle programmation
les environnements sont pris en charge.
lampe de table 4-4: Programmation Environnements: Type Tailles :
┌────────────────────────┬─────────┬──── ─────┬──── ─────┬─────────┐
│Programmation Environnement │ Bits in │ Bits in │ Bits in │ Bits in │
│ getconf Nom │ int │ Long │ aiguille │ off_t │
├────────────────────────┼─────────┼──── ─────┼──── ─────┼─────────┤
│_POSIX_V7_ILP32_OFF32 │ 32 │ 32 │ 32 │ 32 │
│_POSIX_V7_ILP32_OFFBIG │ 32 │ 32 │ 32 │ ≥64 │
│_POSIX_V7_LP64_OFF64 │ 32 │ 64 │ 64 │ 64 │
│_POSIX_V7_LPBIG_OFFBIG │ ≥32 │ ≥64 │ ≥64 │ ≥64 │
└────────────────────────┴─────────┴───── ────┴──── ─────┴─────────┘
Toutes les implémentations doivent prendre en charge un ou plusieurs environnements dans lesquels les largeurs de
les types suivants ne sont pas supérieurs à la largeur du type Long:
taille_noir_t ptrdiff_t tcflag_t
cc_t taille_t wchar_t
mode_t vitesse_t hiver_t
nfds_t taille_t
pid_t susecondes_t
Les fichiers exécutables créés lors de la sélection de ces environnements doivent être dans un état approprié
format pour l'exécution par le exec famille de fonctions. Chaque environnement peut être l'un des
ceux dans lampe de table 4-4, Programmation Environnements: Type Tailles :, ou il peut s'agir d'un autre environnement.
Les noms des environnements qui répondent à cette exigence doivent être émis par un getconf
commande utilisant l'argument POSIX_V7_WIDTH_RESTRICTED_ENVS, comme -liste séparée
de noms pouvant être utilisés avec le getconf -v option. Si plusieurs environnements se rencontrent
Conformément à cette exigence, les noms de tous ces environnements doivent être affichés sur des lignes séparées. N'importe lequel
de ces noms pourront ensuite être utilisés ultérieurement getconf commande pour obtenir les drapeaux
spécifique à cet environnement avec les suffixes suivants ajoutés le cas échéant :
_CFLAGS Pour obtenir les drapeaux du compilateur C.
_LDFLAGS Pour obtenir les indicateurs de l'éditeur de liens/chargeur.
_LIBS Pour récupérer les bibliothèques.
Cette exigence pourrait être supprimée dans une future version.
Lorsque cet utilitaire traite un fichier contenant une fonction appelée principal(), ce sera
défini avec un type de retour équivalent à int. Utiliser le retour de l'appel initial à
principal() doit être équivalent (sauf en ce qui concerne les problèmes de portée linguistique) à l'appel
sortie() avec la valeur renvoyée. Arriver à la fin de l'appel initial à principal() doit être
équivaut à appeler sortie(0). L'implémentation ne doit pas déclarer de prototype pour cela
la fonction.
Les implémentations fournissent des chaînes de configuration pour les indicateurs du compilateur C, les indicateurs de l'éditeur de liens/chargeur,
et des bibliothèques pour chaque environnement pris en charge. Lorsqu'une application doit utiliser un
environnement de programmation plutôt que l'environnement de programmation par défaut d'implémentation
lors de la compilation, l'application doit d'abord vérifier que l'implémentation prend en charge le
environnement souhaité. Si l'environnement de programmation souhaité est pris en charge, l'application
devra alors invoquer c99 avec les indicateurs appropriés du compilateur C comme premières options pour le
compiler, les indicateurs de l'éditeur de liens/chargeur appropriés après toute autre option, sauf −l mais avant
des opérandes ou −l options, et les bibliothèques appropriées à la fin des opérandes et
−l options.
Les applications conformes ne doivent pas tenter de relier entre eux des fichiers objets compilés pour
différents modèles de programmation. Les applications doivent également savoir que les données binaires placées dans
la mémoire partagée ou dans les fichiers peuvent ne pas être reconnus par les applications conçues pour d'autres
modèles de programmation.
lampe de table 4-5: Programmation Environnements: c99 Arguments
┌────────────────────────┬─────────────── ──────┬── ─────────────────────────────┐
│Programmation Environnement │ c99 Arguments │
│ getconf Nom │ Utilisez le │ getconf Nom │
├────────────────────────┼────────────── ───────┼── ─────────────────────────────┤
│_POSIX_V7_ILP32_OFF32 │ Indicateurs du compilateur C │ POSIX_V7_ILP32_OFF32_CFLAGS │
│ │ Indicateurs de l'éditeur de liens/chargeur │ POSIX_V7_ILP32_OFF32_LDFLAGS │
│ │ Bibliothèques │ POSIX_V7_ILP32_OFF32_LIBS │
├────────────────────────┼────────────── ───────┼── ─────────────────────────────┤
│_POSIX_V7_ILP32_OFFBIG │ Indicateurs du compilateur C │ POSIX_V7_ILP32_OFFBIG_CFLAGS │
│ │ Indicateurs de l'éditeur de liens/chargeur │ POSIX_V7_ILP32_OFFBIG_LDFLAGS │
│ │ Bibliothèques │ POSIX_V7_ILP32_OFFBIG_LIBS │
├────────────────────────┼────────────── ───────┼── ─────────────────────────────┤
│_POSIX_V7_LP64_OFF64 │ Indicateurs du compilateur C │ POSIX_V7_LP64_OFF64_CFLAGS │
│ │ Indicateurs de l'éditeur de liens/chargeur │ POSIX_V7_LP64_OFF64_LDFLAGS │
│ │ Bibliothèques │ POSIX_V7_LP64_OFF64_LIBS │
├────────────────────────┼────────────── ───────┼── ─────────────────────────────┤
│_POSIX_V7_LPBIG_OFFBIG │ Indicateurs du compilateur C │ POSIX_V7_LPBIG_OFFBIG_CFLAGS │
│ │ Indicateurs de l'éditeur de liens/chargeur │ POSIX_V7_LPBIG_OFFBIG_LDFLAGS │
│ │ Bibliothèques │ POSIX_V7_LPBIG_OFFBIG_LIBS │
└────────────────────────┴────────────── ───────┴── ─────────────────────────────┘
En plus des environnements de programmation de taille de type ci-dessus, toutes les implémentations
prendre en charge un environnement de programmation multithread orthogonal à tous les
environnements de programmation répertoriés ci-dessus. Le getconf l'utilitaire peut être utilisé pour obtenir des indicateurs pour
l'environnement de programmation threadé, comme indiqué dans lampe de table 4-6, Fileté Programmation
Environnement: c99 Arguments.
lampe de table 4-6: Fileté Programmation Environnement: c99 Arguments
┌────────────────────────┬────────────── ───────┬── ────────────────────────┐
│Programmation Environnement │ c99 Arguments │
│ getconf Nom │ Utilisez le │ getconf Nom │
├────────────────────────┼─────────────── ──────┼── ────────────────────────┤
│_POSIX_THREADS │ Indicateurs du compilateur C │ POSIX_V7_THREADS_CFLAGS │
│ │ Indicateurs de l'éditeur de liens/chargeur │ POSIX_V7_THREADS_LDFLAGS │
└────────────────────────┴────────────── ───────┴── ────────────────────────┘
Ces indicateurs d'environnement de programmation peuvent être utilisés conjointement avec n'importe quel type de taille
environnements de programmation pris en charge par l’implémentation.
EXIT STATUT
Les valeurs de sortie suivantes doivent être renvoyées :
0 Compilation ou édition de lien réussie.
>0 Une erreur s'est produite.
CONSÉQUENCES OF LES ERREURS
Quand c99 rencontre une erreur de compilation qui empêche la création d'un fichier objet, il
doit écrire un diagnostic sur l'erreur standard et continuer à compiler un autre code source
opérandes, mais il ne doit pas effectuer la phase de liaison et renvoyer un état de sortie non nul. Si
la modification du lien échoue, un message de diagnostic doit être écrit dans l'erreur standard et
c99 sort avec un statut non nul. Une demande conforme doit s'appuyer sur le statut de sortie
of c99, plutôt que sur l'existence ou le mode du fichier exécutable.
Le manuel de formation Abonnement les sections sommes-nous informatif.
INSCRIPTION UTILISATION
Depuis l' c99 l'utilitaire crée généralement des fichiers dans le répertoire courant pendant le
processus de compilation, il est généralement nécessaire d'exécuter le c99 utilitaire dans un répertoire dans
lequel un fichier peut être créé.
Sur les systèmes fournissant la conformité POSIX (voir le volume Base Definitions de POSIX.1‐2008,
Chapitre 2, Conformité), c99 est requis uniquement avec l'option Développement en langage C ; XSI-
les systèmes conformes fournissent toujours c99.
Certaines implémentations historiques ont créé .o fichiers lorsque -c n'est pas précisé et plus
plus d’un fichier source est fourni. Cette zone n'étant pas précisée, l'application ne peut pas
compter sur .o fichiers en cours de création, mais il doit également être préparé pour tout .o fichiers qui
existent déjà et sont supprimés à la fin de la modification du lien.
Il est possible que si un utilisateur fournit des versions de la norme
fonctions (avant qu'elles ne soient rencontrées par un −l c ou explicite −l m), ce
ces versions seraient utilisées à la place des versions standards. Il y a diverses raisons
cela pourrait ne pas être vrai (fonctions définies comme macros, manipulations pour un espace de nom propre,
etc.), donc l'existence de fichiers nommés de la même manière que les bibliothèques standards
au sein du −L Il est explicitement indiqué que les répertoires produisent un comportement non spécifié.
Toutes les fonctions spécifiées dans le volume System Interfaces de POSIX.1‐2008 peuvent être
visible par les implémentations lors d’une recherche dans la bibliothèque Standard C. Conforme
les applications doivent demander explicitement la recherche dans les autres bibliothèques standards lorsque les fonctions
rendus visibles par ces bibliothèques sont utilisés.
Dans la norme ISO C, le mappage des caractères sources physiques vers la source C
le jeu de caractères est défini par l'implémentation. Les implémentations peuvent supprimer les caractères d'espacement
avant la fin d'une ligne (physique) dans le cadre de cette cartographie et, en tant que
conséquence de cela, un ou plusieurs caractères d'espacement (et aucun autre caractère) entre
un le personnage et le le caractère qui termine la ligne produit
résultats définis par la mise en œuvre. Les applications portables ne doivent pas utiliser de telles constructions.
Certain c99 les compilateurs non conformes à POSIX.1‐2008 ne prennent pas en charge les trigraphes par défaut.
EXEMPLES
1. L'exemple d'utilisation suivant compile foo.c et crée le fichier exécutable foo:
c99 -o foo foo.c
L'exemple d'utilisation suivant compile foo.c et crée le fichier objet foo.o:
c99 -c foo.c
L'exemple d'utilisation suivant compile foo.c et crée le fichier exécutable a.out:
c99 foo.c
L'exemple d'utilisation suivant compile foo.c, le relie à bar.o, et crée le
fichier exécutable a.out. Il peut également créer et laisser foo.o:
c99 foo.c bar.o
2. L'exemple suivant montre comment une application utilisant des interfaces de threads peut tester
prise en charge et utilisation d'un environnement de programmation prenant en charge 32 bits int, Longet aiguille
types et un off_t tapez en utilisant au moins 64 bits :
offbig_env=$(getconf _POSIX_V7_ILP32_OFFBIG)
if [ $offbig_env != "-1" ] && [ $offbig_env != "indéfini" ]
puis
c99 $(getconf POSIX_V7_ILP32_OFFBIG_CFLAGS) \
$(getconf POSIX_V7_THREADS_CFLAGS) -D_XOPEN_SOURCE=700 \
$(getconf POSIX_V7_ILP32_OFFBIG_LDFLAGS) \
$(getconf POSIX_V7_THREADS_LDFLAGS) foo.c -o foo \
$(getconf POSIX_V7_ILP32_OFFBIG_LIBS) \
-l fil de discussion
d'autre
echo ILP32_OFFBIG programmation convivial pas soutenu
sortie 1
fi
3. Les exemples suivants clarifient l’utilisation et les interactions de −L et −l options.
Considérons le cas dans lequel module ca fonction d'appels f() en librairie libQ.a, et module
bc fonction d'appels g() en librairie libp.a. Supposons que les deux bibliothèques résident dans
/abc. La ligne de commande pour compiler et lier de la manière souhaitée est :
c99 −L /abc main.o ca −l Q bc −l p
Dans ce cas, le −L l'option doit simplement précéder la première −l option, puisque les deux libQ.a
et libp.a résider dans le même répertoire.
Multiple −L Les options peuvent être utilisées lorsque des collisions de noms de bibliothèques se produisent. S'appuyant sur le
exemple précédent, supposons que l'utilisateur souhaite utiliser un nouveau libp.aen /a/a/a, mais
veut toujours f() depuis /a/b/c/libQ.a:
c99 −L /a/a/a −L /abc main.o ca −l Q bc −l p
Dans cet exemple, l'éditeur de liens recherche le −L options dans l'ordre spécifié et trouve
/a/a/a/libp.a avant /a/b/c/libp.a lors de la résolution des références pour bc. L'ordre de
le −l Les options restent cependant importantes.
4. L'exemple suivant montre comment une application peut utiliser un environnement de programmation où
les largeurs des types suivants : taille_noir_t, cc_t, mode_t, nfds_t, pid_t, ptrdiff_t,
taille_t, vitesse_t, taille_t, susecondes_t, tcflag_t, wchar_t, hiver_t
ne sont pas plus grands que la largeur des caractères Long:
# Prénom choisissez UN of le énumérés et rapides. ...
# ... s'il n'y a pas de contraintes supplémentaires, la première fera :
CENV=$(getconf POSIX_V7_WIDTH_RESTRICTED_ENVS | head -nl)
# ... ou, si un environnement prenant en charge les fichiers volumineux est préféré,
# recherchez les noms contenant "OFF64" ou "OFFBIG". (Cela choisit
# le dernier de la liste si aucun ne correspond.)
pour CENV dans $(getconf POSIX_V7_WIDTH_RESTRICTED_ENVS)
do
cas $CENV dans
*OFF64*|*OFFBIG*) pause ;;
Esac
fait
# Le nom de l'environnement choisi peut maintenant être utilisé comme ceci :
c99 $(getconf ${CENV}_CFLAGS) -D _POSIX_C_SOURCE=200809L \
$(getconf ${CENV}_LDFLAGS) foo.c -o foo \
$(getconf ${CENV}_LIBS)
RAISONNEMENT
Le manuel de formation c99 l'utilitaire est basé sur le c89 utilitaire initialement introduit dans l'ISO POSIX‐2:1993
standard.
Certains des changements de c89 inclure la possibilité d'intercaler les options et les opérandes
(que beaucoup c89 implémentations autorisées même si cela n'est pas spécifié), la description
of −l comme option au lieu d'un opérande, et la modification du contenu du
Section Bibliothèques standard pour prendre en compte les nouveaux en-têtes et options ; Par exemple,
ajouté à la description de −l rtet −l tracer ajouté pour l’option Traçage.
POSIX.1‐2008 précise que le c99 l'utilitaire doit être capable d'utiliser des fichiers normaux pour * .o
fichiers et pour a.out des dossiers. Les implémentations sont libres d'écraser les fichiers existants d'autres
types lors de la tentative de création de fichiers objets et de fichiers exécutables, mais ne sont pas obligés de le faire.
fais-le. Si quelque chose d'autre qu'un fichier normal est spécifié et que son utilisation échoue pour quelque raison que ce soit.
raison, c99 est nécessaire pour émettre un message de diagnostic et quitter avec une sortie non nulle
statut. Mais pour certains types de fichiers, le problème peut ne pas être remarqué avant longtemps. Pour
exemple, si un FIFO nommé a.out existe dans le répertoire courant, c99 peut tenter d'ouvrir
a.out et sera accroché dans le ouvert() appelez jusqu'à ce qu'un autre processus ouvre le FIFO en lecture.
Ensuite c99 peut écrire la plupart des a.out au FIFO et échoue lorsqu'il tente de se rapprocher
au début du fichier pour insérer un horodatage (les FIFO ne sont pas des fichiers recherchables). Le c99
L'utilitaire est également autorisé à émettre un diagnostic immédiatement s'il rencontre un problème. a.out or * .o
fichier qui n’est pas un fichier normal. Pour une utilisation portable, les applications doivent garantir que tout
a.out, -o argument d'option, ou * .o fichiers correspondant à n'importe quel *.c les fichiers ne sont pas en conflit
avec des noms déjà utilisés qui ne sont pas des fichiers normaux ou des liens symboliques pointant vers
fichiers réguliers.
Sur de nombreux systèmes, les applications multithread s'exécutent dans un environnement de programmation
distinct de celui utilisé par les applications monothread. Cette programmation multithread
environnement (en plus de devoir spécifier −l fil de discussion au moment de la liaison) peut nécessiter
des indicateurs supplémentaires à définir lorsque les en-têtes sont traités au moment de la compilation (−D_REENTRANT qui est
commun). Cet environnement de programmation est orthogonal à la programmation par taille de caractères
environnements discutés ci-dessus et répertoriés dans lampe de table 4-4, Programmation Environnements: Type
Tailles :. Cette version de la norme ajoute getconf appels d'utilitaires pour fournir le compilateur C
indicateurs et indicateurs de l'éditeur de liens/chargeur nécessaires pour prendre en charge les applications multithread. Notez que sur
un système où les applications monothread sont un cas particulier d'un système multithread
application, les deux getconf les appels peuvent renvoyer des chaînes NULL ; sur d'autres implémentations
ces deux chaînes peuvent être des chaînes non NULL.
Le comité de normalisation C a inventé les trigraphes (par exemple, "??!" représenter '|') À
résoudre les problèmes de portabilité des personnages dans les environnements de développement sur la base des
variantes du jeu de caractères standard ISO/IEC 7:646 à 1991 bits. Cependant, ces environnements
étaient déjà obsolètes au moment de la publication de la première norme ISO C, et en pratique
les trigraphes n'ont pas été utilisés aux fins prévues et sont généralement destinés à avoir
leur signification originale dans K&R C. Par exemple, en pratique, une chaîne source en langage C comme
"Quoi??!" est généralement destiné à se terminer par deux des personnages et un
, pas dedans '|'.
FUTUR DIRECTIONS
Aucun.
Utilisez c99posix en ligne à l'aide des services onworks.net