2010-10-16 4 views

Répondre

5

Le fichier #include indique au compilateur à quoi ressemble une fonction, dans quel type il retourne, combien de paramètres de quels types il prend, mais il ne dit pas le contenu du compilateur.

L'indicateur -lm inclut cette bibliothèque mathématique réelle qui contient le code pour les fonctions à appeler.

Fonctionne de la même manière avec printf(), fread() et d'autres fonctions standard. Lorsque vous incluez stdio.h, vous n'incluez pas réellement le code de la fonction mais les définitions. Parce que la bibliothèque C est implicitement liée sans que vous ayez à faire quoi que ce soit à ce sujet, vous ne le remarquez pas.

+1

Mais '' fait aussi partie de la bibliothèque C standard ... – schot

+0

Il est, et je voudrais pouvoir inclure pourquoi il n'est pas géré de la même façon (sauf pour Windows) ... mais je ne sais pas connaître. Le point traverse, tho :) – LukeN

+0

bonne explication – mkind

0

Parce que dans C, Techniquement, il n'y a aucun lien entre le fichier d'en-tête et la bibliothèque. Il peut y avoir plus de fichiers d'en-tête que de bibliothèques, ou l'inverse. C'est juste une question de convention (et bien sûr cela a du sens) d'avoir une relation 1: 1 dans la plupart des cas.

2

Parce que vous devez informer le compilateur quelle math bibliothèque pour lier avec, rien à voir avec l'inclusion de math.h.

1

De même que votre propre code, qui doit contenir des fichiers d'en-tête (.h) pour les déclarations de fonction et les fichiers source (.c) pour les définitions de fonctions, le code de la bibliothèque mathématique est en deux parties. Le fichier d'en-tête, que vous incluez, contient les déclarations de fonction:

double sqrt(double n); 

Cependant, il ne contient rien sur la façon dont ces fonctions fonctionnent. Ce code se trouve dans un fichier séparé que vous devez lier, de la même manière que vous liez différents fichiers source pour créer une application.