Если функция имеет определение, соответствующее неявному объявлению (т.е. она возвращает int
и имеет фиксированное число аргументов, и не имеет прототипа), и вы всегда вызываете ее с правильным числом и типами аргументы, то нет никаких отрицательных последствий (кроме плохого, устаревшего стиля).
т.е. в вашем коде выше, это как если бы функция была объявлена как:
int funcA();
Поскольку не не соответствует определению функции, вызов funcA()
из file1.c
вызывает неопределенное поведение, что означает, что он может завершиться сбоем. В вашей архитектуре, с вашим текущим компилятором, это явно не так, но архитектура и компиляторы меняются.
GCC может связать его, потому что символ, представляющий точку входа в функцию, не изменяется при изменении типа функции (опять же ... в вашей текущей архитектуре с вашим текущим компилятором - хотя это довольно распространено). *
Правильно объявлять ваши функции - это хорошо, если только по той причине, что это позволяет вам дать вашей функции прототип, а это означает, что компилятор должен диагностировать ее, если вы вызываете ее с неправильным числом или типами аргументов .