Question

Il est dans le titre; super simple que je pense, mais il est si difficile de rechercher des choses partout syntaxiques.

Ce sont deux fichiers de bibliothèque que je copie de CS50.net , et je suis se demandant pourquoi ils ont deux extensions différentes.

Était-ce utile?

La solution

.c: c fichier (où l'action réelle est, en général)

.h: fichier d'en-tête (à inclure une directive #include préprocesseur). Contient des choses qui est normalement considéré comme partagé avec d'autres parties de votre code, comme des prototypes de fonction, des trucs # define'd, de déclaration extern pour les variables globales (oh, l'horreur) et similaires.

Techniquement, vous pouvez tout mettre dans un seul fichier. Tout un programme C. millions de lignes. Mais nous, les humains ont tendance à organiser les choses. Donc, vous créez différents fichiers C, chacun contenant des fonctions particulières. C'est tout agréable et propre. Puis tout à coup vous vous rendez compte qu'une déclaration vous dans un fichier C donné devrait exister aussi dans un autre fichier C. Donc, vous les dupliquer. Le mieux est donc d'extraire la déclaration et le mettre dans un fichier commun, qui est le .h

Par exemple, dans le cs50.h que vous trouverez ce qu'on appelle des « déclarations » avant de vos fonctions. Une déclaration avant est un moyen rapide de dire au compilateur comment une fonction doit être appelée (par exemple ce que params d'entrée) et ce qu'il retourne, il peut donc effectuer une vérification appropriée (par exemple si vous appelez une fonction avec le nombre de paramètres, il se plaindra).

Un autre exemple. Supposons que vous écrivez un fichier .c contenant une fonction mise en correspondance d'expression régulière. Vous voulez que votre fonction d'accepter l'expression régulière, la chaîne pour correspondre, et un paramètre qui indique si la comparaison doit être insensible à la casse.

dans le .c vous donc mettre

bool matches(string regexp, string s, int flags) { the code }

Maintenant, supposons que vous voulez passer les drapeaux suivants:

0: si la recherche est sensible à la casse

1: si la recherche est insensible à la casse

Et vous voulez vous garder ouvert à de nouveaux drapeaux, de sorte que vous ne l'avez pas mis un booléen. jouer avec les chiffres est difficile, de sorte que vous définir des noms utiles pour ces drapeaux

#define MATCH_CASE_SENSITIVE 0
#define MATCH_CASE_INSENSITIVE 1

Cette information va dans le .h, parce que si un programme veut utiliser ces étiquettes, il n'a aucun moyen de les connaître, sauf si vous incluez l'info. Bien sûr, vous pouvez les mettre dans le .c, mais vous devez inclure le code .c (tout!), Qui est une perte de temps et une source de problèmes.

Autres conseils

Bien sûr, il n'y a rien qui dit l'extension d'un fichier d'en-tête doit être .h et l'extension d'un fichier source C doit être .c. Ce sont des conventions utiles.

E:\Temp> type my.interface
#ifndef MY_INTERFACE_INCLUDED
#define MYBUFFERSIZE 8
#define MY_INTERFACE_INCLUDED
#endif

E:\Temp> type my.source
#include <stdio.h>

#include "my.interface"

int main(void) {
    char x[MYBUFFERSIZE] = {0};
    x[0] = 'a';
    puts(x);
    return 0;
}

E:\Temp> gcc -x c my.source -o my.exe

E:\Temp> my
a

Ils ne sont pas vraiment des fichiers de bibliothèque. Ils sont juste des fichiers source. Comme l'a dit Stefano, le fichier .c est le fichier source C qui utilise en fait / définit la source réelle de ce qu'il simplement décrit dans le fichier d'en-tête fichier .h ,. Le fichier d'en-tête indique généralement tous les prototypes de fonctions et des structures qui seront utilisées dans le fichier source réelle. Pensez-y comme une référence / annexe. Cela est évident à regarder le fichier d'en-tête, comme vous le verrez :) Alors quand vous voulez utiliser quelque chose qui a été écrit dans ces fichiers source, vous #include le fichier d'en-tête, qui contient les informations que le compilateur aura besoin de savoir.

Le .c est le fichier source et .h est le .

Les fichiers .c sont des fichiers sources qui seront compilés. Les fichiers .h sont utilisés pour exposer l'API d'un programme soit autre partie de ce programme ou tout autre programme est que vous créez une bibliothèque.

Par exemple, le PizzaDelivery du programme pourrait avoir 1 fichier .c avec le programme principal et 1 fichier .c avec des fonctions utilitaires. Maintenant, pour la partie principale du programme pour pouvoir utiliser les fonctions utilitaires, vous devez exposer l'API, via un prototype de fonction, dans un fichier .h, ce fichier .h étant inclus par le fichier principal .c.

.c : 'C' source code
.h : Header file

En général, les fichiers .c contiennent la mise en œuvre et les fichiers .h contiennent la « interface » d'une mise en œuvre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top