lattrapecoeur wrote:
Par contre je peux vous poser une autre question ?
Dans mon main.c je fais appelle à la fonction Hello.c, comment make sait-il où est ma fonction Hello.c car je ne l'ai pas incluse dans le main j'ai juste inclu le fichier header hello.h ? d'ailleurs je n'inclus pas les .h dans mon Makefile ? :-?
Merci
En réalité comme a dit Pikachu, C'est gcc qui sait tout ça. Plus exactement :
quand tu fais
gcc -c main.c -o main.o gcc ne fait que compiler ce qu'il y a dans main.c. L'appel à la fonction Hello() ne se fait pas directement. gcc se contente de dire qu'il faudra trouver la fonction void Hello(void) plus tard (lors de l'édition des liens). Le prototype présent dans hello.h ne sert que d'indication à gcc pour lui dire que la fonction Hello() est de type void Hello(void). Si tu ne le met pas, tu auras un warning qui te dira que la fonction Hello() n'est indiqué nul part, mais ça n'empéchera pas de compiler.
Attention, sans la déclaration prototype, il est impossible à gcc de savoir si il y a un soucis lors de l'appel à la fonction Hello(). (du genre, Hello(1234) passera à la compilation, il y aura un soucis à l'execution du code)
L'édition des liens se fait avec
gcc hello.o main.o -o prog. Là gcc va regarder les liens qui n'ont pas pu être fait, et va lier le tout pour former le programme prog.