Фактически я компилировался с несколькими файлами. Ниже перечислены файлы:вызов функций из другого c-файла
файл main.c ->
#include <stdio.h>
void foo3(void)
{
printf("INSIDE foo3 function\n");
}
int main()
{
foo1();
foo2();
foo3();
}
файл 1.c ->
#include <stdio.h>
void foo1(void)
{
printf("INSIDE foo1 function\n");
}
файл 2.c ->
#include <stdio.h>
void foo2(void)
{
printf("INSIDE foo2 function\n");
}
Теперь я собрал с использованием gcc следующим образом ->
gcc 1.c 2.c main.c -o main
следующий был выход ->
INSIDE foo1 function
INSIDE foo2 function
INSIDE foo3 function
Мои сомнения в том, как может main
() называют foo1()
и foo2()
, когда они не были объявлены в main.c
. Но теперь, если я изменю main.c следующим образом (запись определения foo3()
после main()
), как это:
отредактированный main.c ->
#include <stdio.h>
int main()
{
foo1();
foo2();
foo3();
}
void foo3(void)
{
printf("INSIDE foo3 function\n");
}
, а затем, если я компиляции я получаю эту ошибку:
main.c:9:6: warning: conflicting types for ‘foo3’ [enabled by default]
void foo3(void)
^
main.c:6:2: note: previous implicit declaration of ‘foo3’ was here
foo3();
^
почему эта ошибка не показано ранее в случае foo1()
и foo2()
. Заранее спасибо.
благодарю вас за ценную информацию. еще одно сомнение. почему он не показывает предупреждение о конфликтующих типах для foo2() и foo1(), когда они также появляются впервые в main(), например foo3() без какого-либо предыдущего объявления в main.c. – Akhil
Для этого вам нужна оптимизация времени ссылки. Но для вас важно привыкнуть писать и использовать ваши файлы заголовков и объявлять все публичные вещи там. –
О, ладно. Компиляция main.c будет показывать только предупреждение foo3.c, поскольку это только функция, определенная в main.c. Таким образом, вышеупомянутое предупреждение для foo3() является единственным предупреждением в main.c, предполагается, что другие функции возвращают тип int во время компиляции main.c, и, следовательно, для них не возникает предупреждений, поскольку их определение не возникает во время компиляции основного .c. Благодарим вас за ценную поддержку. – Akhil