Quelle est la différence entre le langage de programmation C et la programmation C sous Linux?

Quelle est la différence entre le langage de programmation C et la programmation C sous Linux?

La syntaxe est-elle la même dans les deux?

Ou est la différence que lorsque vous exécutez le programme?

Le langage C est régi par la norme C approuvée par l’ISO et ne prend pas en compte la plate-forme sous-jacente sur laquelle vous utilisez C. Du sharepoint vue de la norme linguistique, il n’y a pas de différence et un programme conforme doit fonctionner correctement. tous les deux.

Cependant, dans la pratique, il faut faire des choses spécifiques à la plate-forme: mécanismes IPC, multithreading, access aux fichiers, etc., spécifiques à la plate-forme. Ces fonctionnalités varient d’une plate-forme à l’autre. Notez que cette fonctionnalité n’est pas couverte par la norme du langage C, son utilisation rend le programme non portable sur d’autres plates-formes.

Linux est une plate-forme qui peut être utilisée pour le développement de programmes et d’applications utilisant des langages tels que C. La seule chose est que c’est sa simplicité et son goût pour un système d’exploitation particulier. Autre chose, il n’y a pas de différence dans la syntaxe. C’est absolument pareil.

Il y a des langues et il y a des plates-formes. Les langues populaires sont généralement régies par des normes (p. Ex. ANSI). C est un langage de programmation.

Linux, Windows, Android, etc. sont des plates-formes (ou plus précisément des systèmes d’exploitation). Chaque plate-forme offre un ensemble de bibliothèques (appels API) auxquelles vous pouvez accéder pour effectuer différentes opérations sur cette plate-forme. Les appels système / bibliothèque pour l’access au système de fichiers, la mise en réseau, un système de fenêtrage / d’interface graphique spécifique, etc. peuvent être différents sur différentes plates-formes. Donc, savoir «écrire C sous Linux» signifie que vous connaissez C et que vous connaissez beaucoup d’appels de plates-formes Linux. Même les différents systèmes de fenêtrage sous Linux peuvent avoir différents appels API.

Il existe également des standards sur plusieurs plates-formes, telles que POSIX, qui permettent à la bibliothèque d’appeler les mêmes sur différentes plates-formes. Bien que cela ne traite pas de la plupart des disparités entre les API de l’interface graphique.

La syntaxe de programmation du langage C est définie dans la norme ISO C. L’exécution qui en résulte dépend du compilateur utilisé pour transformer le code en programme exécutable et de la machine sur laquelle la compilation s’exécute (ou au moins de l’architecture cible pour laquelle elle s’exécute). Les résultats de cette compilation dépendront de l’utilisation de la syntaxe de programmation (le code) contre l’interprétation de ce code à partir du compilateur. Si le programmeur limite ses habitudes de programmation à l’écriture d’un code C conforme, excluant le comportement défini par l’implémentation ou le comportement indéfini, son exécutable résultant se comportera de manière identique sur n’importe quelle plate-forme.

Ensuite, vous pensez qu’il y a environ trois “couches” d’implémentation C que vous pourriez faire: la programmation du kernel, la programmation système et la programmation de l’espace utilisateur.

La programmation du kernel est une programmation au niveau matériel et utilise généralement le comportement défini par l’implémentation pour interfacer le monde matériel au monde logiciel. Ils fournissent une interface C aux programmeurs système. Ils diffèrent d’une machine à l’autre et l’architecture résultant de cette implémentation définit la différence entre les différents systèmes d’exploitation (ex: fenêtre vs linux vs OsX vs MIT, etc.).

Les programmeurs système exploitent l’API du kernel (le système) pour créer la bibliothèque standard C (ils définissent l’implémentation des fonctionnalités standard de niveau supérieur C). Ex: glibc et le compilateur gnu c (gcc) devraient être conformes à la section non ambiguë du standard C et définir l’implémentation du comportement AND non défini défini par l’implémentation. Cette couche d’implémentation est indépendante du matériel (dans une certaine mesure) puisque le niveau du kernel constitue une abstraction matérielle. Mais ils gèrent les ressources de cette couche d’abstraction (ex: RAM ou écriture dans un fichier sur le disque dur ou envoi d’un stream de données sur un socket Internet).

Les programmeurs de l’espace utilisateur codent les programmes qui utilisent l’API standard et les compilateurs pour créer des logiciels “utilisables” tels que gnome-terminal ou i3 windows tiling manager (je ne trouve pas d’exemple un code C “convivial” fonctionnant sous Windows) du haut de ma tête …). A moins que ces implémentations logicielles n’utilisent un code de définition d’implémentation ou un code de comportement non défini, celui-ci doit être indépendant de la plate-forme.

La réponse est simple: il n’y a pas de différence!

Cependant, chaque système d’exploitation possède sa propre API. Cette API ne dépend pas du langage de programmation.

Exemple: La fonction “MessageBox ()” existe uniquement sous Windows, pas sous Linux. C’est une fonction spécifique à Windows (disponible dans tout langage de programmation sous Windows).

Il y a aussi des fonctions de bibliothèque qui sont nommées différemment sous Linux et Windows.

Un exemple serait la fonction “ssortingcmp ()” (Windows) nommée “strcasecmp ()” sous Linux. Cependant, ce n’est pas un problème du langage de programmation C mais des bibliothèques (fichiers .H et fichiers .SO).

Différents systèmes d’exploitation auront des API différentes (interfaces de programmation d’application) qui peuvent être des bibliothèques conçues pour créer des logiciels d’application pour votre système d’exploitation spécifique. GNU / Linux possède des bibliothèques spécifiques telles que sys/socket.h , linux.h , sys/types.h , etc.