Foire aux questions sur la programmation en C - FAQ 1
- Quelles sont les principales caractéristiques du langage C?
- Quelle est la différence entre la déclaration et la définition d'une variable/fonction
- Quelle est la portée d'une variable? Comment les variables ont-elles une portée en C?
- Quand devrions-nous utiliser des pointeurs dans un programme C?
- Quel est le pointeur NULL?
- Quel est le pointeur pendouillant (Dangling pointer)?
- Qu'est-ce qu'une fuite de mémoire (memory leak)? Pourquoi devrait-il être évité
- Quelles sont les variables statiques locales? Quelle est leur utilisation?
- Que sont les fonctions statiques? Quelle est leur utilisation?
Quelles sont les principales caractéristiques du langage C?
C est un langage procédural. Les principales caractéristiques du langage C comprennent un accès de base à la mémoire, un ensemble simple de mots-clés et un style clair. Ces caractéristiques le rendent approprié pour la programmation système telle que le développement du système d'exploitation ou du compilateur.
Quelle est la différence entre la déclaration et la définition d'une variable/fonction
La déclaration d'une variable / fonction déclare simplement que la variable / fonction existe quelque part dans le programme mais que la mémoire ne leur est pas allouée. Mais la déclaration d'une variable / fonction joue un rôle important, à savoir le type de la variable / fonction. Par conséquent, lorsqu'une variable est déclarée, le programme connaît le type de données de cette variable.
En cas de déclaration de fonction, le programme sait quels sont les arguments de ces fonctions, leurs types de données, l'ordre des arguments et le type de retour de la fonction. Donc, tout est question de déclaration. En ce qui concerne la définition, lorsque nous définissons une variable / fonction, en plus du rôle de déclaration, elle alloue également de la mémoire pour cette variable/fonction.
// Ceci est seulement une déclaration. x n'est pas allouée de la mémoire extern int x; // C’est à la fois une déclaration et une définition, la mémoire est allouée pour x. int x; // declaration d'une fonction int mafonction(int x, int y); // définition d'une fonction int mafonction(int x, int y){ int a; // traitements return a; }
Quelle est la portée d'une variable? Comment les variables ont-elles une portée en C?
La portée d'une variable est la partie du programme où la variable peut être directement accessible. En C, tous les identificateurs ont une portée lexical (ou statique).
Quand devrions-nous utiliser des pointeurs dans un programme C?
- Pour obtenir l'adresse d'une variable
- Pour réaliser le passage par référence, les pointeurs en C permettent à différentes fonctions de partager et de modifier leurs variables locales.
- Passer de grandes structures afin d’éviter une copie complète de la structure.
- Implémenter des structures de données «liées» telles que LinkedList et des arbres binaires.
Quel est le pointeur NULL?
NULL est utilisé pour indiquer que le pointeur ne pointe pas vers un emplacement valide. Idéalement, nous devrions initialiser les pointeurs avec la valeur NULL si nous ne connaissons pas leur valeur au moment de la déclaration. En outre, nous devrions créer un pointeur NULL lorsque la mémoire indiquée par celle-ci est libérée au milieu d'un programme.
Quel est le pointeur pendouillant (Dangling pointer)?
Le pointeur pendouillant est un pointeur qui ne pointe pas vers un emplacement mémoire valide. Les pointeurs pendouillants apparaissent lorsqu'un objet est supprimé ou désalloué, sans modifier la valeur du pointeur, de sorte que le pointeur pointe toujours sur l'emplacement mémoire de la mémoire désallouée. Voici un exemple.
int* ptr = NULL { int x = 10; ptr = &x; } // x sort de la portée et la mémoire allouée à x est libre maintenant. // Donc, ptr est un pointeur pendouillant maintenant.
Qu'est-ce qu'une fuite de mémoire (memory leak)? Pourquoi devrait-il être évité
Une fuite de mémoire se produit lorsque les programmeurs créent une mémoire dans le tas et oublient de la supprimer. Les fuites de mémoire sont des problèmes particulièrement graves pour des programmes tels que les démons et les serveurs qui, par définition, ne se terminent jamais.
/* Fonction avec une fuite de mémoire */ #include < stdlib.h> void f() { int* ptr = (int*)malloc(sizeof(int)); /* autres traitements */ return; /* Retour sans libérer ptr */ }
Quelles sont les variables statiques locales? Quelle est leur utilisation?
Une variable statique locale est une variable dont la durée de vie ne se termine pas par un appel de fonction où elle est déclarée. Il s'étend sur toute la durée du programme complet. Tous les appels à la fonction partagent la même copie de variables statiques locales. Les variables statiques peuvent être utilisées pour compter le nombre de fois qu'une fonction est appelée. De plus, les variables statiques obtiennent la valeur par défaut égale à 0.
void mafonction(){ static int cpt; printf("la valeur de compteur est : %d \n",cpt); cpt++; } int main(void){ mafonction(); mafonction(); mafonction(); }
la valeur de compteur est : 1
la valeur de compteur est : 2
Que sont les fonctions statiques? Quelle est leur utilisation?
En C, les fonctions sont globales par défaut. Le mot clé «static» avant un nom de fonction la rend statique. Contrairement aux fonctions globales en C, l'accès aux fonctions statiques est limité au fichier dans lequel elles sont déclarées. Par conséquent, lorsque nous voulons restreindre l'accès aux fonctions, nous les rendons statiques. Une autre raison de rendre des fonctions statiques peut être la réutilisation du même nom de fonction dans d'autres fichiers.