8
votes

Quelles extensions GNU C sont disponibles qui ne sont pas triviales à mettre en œuvre en C99?

Comment se fait-il que le noyau Linux ne peut compiler qu'avec GCC? Quelles extensions GNU C sont vraiment nécessaires pour certains projets et pourquoi?


4 commentaires

Si vous fouillez, vous pouvez trouver une question avec des liens avec d'autres compilateurs qui ont construit avec succès Linux. TCC peut le faire pour certaines versions du noyau au moins.


Cet article explique les extensions utilisées: GCC hacks dans le noyau Linux . Certains d'entre eux sont triviaux, certains ne sont pas (surtout les astuces d'optimisation).


Le titre et la question ne correspondent pas très bien.


DMCKEE: Le noyau Linux doit être corrigé un peu pour pouvoir être construit avec TCC.


4 Réponses :


3
votes

GCC prend en charge Fonctions imbriquées , qui ne font pas partie de la Norme C99. Cela dit, une analyse est nécessaire pour voir à quel point ils sont répandus dans le noyau Linux.


0 commentaires

0
votes

Je suppose que ce n'est pas qu'ils sont vraiment cela nécessaires. Il y a juste de nombreuses personnes utiles et la portabilité des compilateurs croisés n'est pas si un problème pour le noyau Linux pour renoncer aux Nexéties. Sans parler de la quantité de travail pure qu'il faudrait pour se débarrasser de s'appuyer sur des extensions.


0 commentaires

2
votes

Le noyau Linux a été écrit pour être compilé par GCC, la conformité standard n'était donc jamais un objectif pour les développeurs de noyau.

et si GCC offre des extensions utiles qui rendent le codage plus facile ou compilé du noyau plus petit ou plus rapide, il s'agissait d'un choix naturel d'utiliser ces extensions.


0 commentaires

9
votes

Voici quelques extensions GCC Le noyau Linux utilise:

  • Assemblage en ligne
  • GCC Construits, tels que __builtin_Expect, __ Basculin_Constant, __ Basculin_return_address
  • Attributs de fonction pour spécifier E.G. ce que les registres à utiliser (par exemple __attribute __ ((regarde (0)), __ attribut __ ((emballé, aligné (page_size)))))
  • Code spécifique selon les macros prédéfinies GCC (par exemple de contournement de certains bugs GCC dans certaines versions)
  • gammes dans des cas de commutation (boîtier 8 ... 15 :)

    Voici quelques autres: http://www.ibm .Com / DeveloperWorks / Linux / Bibliothèque / L-GCC-Hacks /

    Une grande partie de ces spécificités de la GCC est une architecture très dépendante ou est rendue possible en raison de la mise en oeuvre de la CCG, et il n'est probablement pas logique d'être spécifié par une norme C. D'autres sont simplement des extensions pratiques à C. Comme le noyau Linux est construit pour s'appuyer sur ces extensions, d'autres compilateurs doivent fournir les mêmes extensions que GCC pour pouvoir construire le noyau.

    Ce n'est pas que Linux avait de s'appuyer sur ces caractéristiques de GCC, par exemple. Le noyau Netbsd s'appuie très peu sur des trucs spécifiques de GCC.


0 commentaires