можно в file1.c написать
int foo (void){
return 7;
}
в file2.c написать
void myFunc(void){
int foo (void);
int b;
b += foo();
}
и это будет работать
и без всяких инклюдов.
И это не противоречит языку С.
Но в приличном обществе за такое можно и канделябром схлопотать.