Ben déjà, tu peux inclure tout ce que tu veux, pas forcément des .c ou des .h
Généralement on inclut que les .h...
Maintenant voilà comment ca marche (à peu près)
- Code: Tout sélectionner
A.c
#include "A.h"
int main(){sayHello();return 0;}
A.h
#ifndef BOB
#define BOB
void sayHello(){
printf("no");
}
#endif
Lorsque tu compiles A.c (gcc -c A.c)
avant de compiler, tu vas inclure A.h (parce que t'as écris #include "A.h")
Donc tu lis A.h
ya écris #ifndef BOB
Est-ce qu'on a définit BOB? non.
Donc on execute le bloc jusqu'à l'endif
ensuite ya écrit #define BOB. Donc on là on définit BOB.
on arrive finalement au #endif qui dit c'est la fin du bloc, mais qq part on s'en fou.
Du coup tu copies colles tout le bloc en entete de ton fichier .c, puis tu compiles serainement.
Maintenant si tu as
- Code: Tout sélectionner
A.h
#define BOB
#ifndef BOB
void sayHello(){
printf("ouch");
}
#endif
Tu définis BOB.
Ensuite #ifndef BOB return false donc tu vas jusqu'au endif.
Au final tu as rien inclus puisque tu es pas rentré dans le bloc.
Quand tu compiles tu vas te prendre un truc style sayHello was not declared ou qqch du genre.
Je te laisse réfléchir à comment faire si tu as
- Code: Tout sélectionner
A.h
#include "B.h"
void sayHello(){
callB();
}
B.h
#include "A.h"
void callB(){
//doing nothin'
}
void someOtherFunction(){
sayHello();
}
A.c
#include "A.h"
int main(){
sayHello();
}