LINUX.ORG.RU

GCC


0

0

Имеются несколько .c файлов; один главный, а в других описаны функции. Никаких #include не используется. Вопрос: почему при компиляции ($ gcc main.c -c -o main.o) НЕКОТОРЫЕ функции неизвестны?

anonymous

НЕКОТОРЫЕ функции это какие?

Прототипы этих НЕКОТРЫХ функций в main.c есть?
Вобще лучше сделать .h файл в котором описать прототипы функций из остальных файлов и подключить его через #include в main.c

Если же он ругается на библиотечные функции, то так же надо использовать
соответствующие #include.

Vinick ★★
()

Попробуй так: gcc *.c -o main получится исполняемый файл

или так: gcc *.c -c получатся объектники

binr ★★
()

Просто некоторые функции он не знает, а некоторые нормально всё. Переменные из другого модуля он вообще не берёт (по крайней мере &some_variable, ведь, насколько я знаю, адрес потом подставляется).

anonymous
()
Ответ на: комментарий от anonymous

> Просто некоторые функции он не знает, а некоторые нормально всё.

Без примеров кода сложно что-то сказать.

> Переменные из другого модуля он вообще не берёт (по крайней мере &some_variable, ведь, насколько я знаю, адрес потом подставляется).

extern ?

DKorolkov
()

> Имеются несколько .c файлов; один главный, а в других описаны функции.

А функции только описаны или реализованы?

> Никаких #include не используется. Вопрос: почему при компиляции ($ gcc main.c -c -o main.o) НЕКОТОРЫЕ функции неизвестны?

Люблю, когда человек сам отвечает на свой вопрос :) При компиляции любого модуля все ф-ии, которые в нём используются, должны быть известны компилятору. Т.е. известны типы и кол-во аргументов, тип возвращаемого значения и т.н. "calling convention". Обычно это делается включением .h файлов с описаниями ф-ий, посредством тех самых #include, которые у Вас не используются... Если компилятор C встречает вызов ф-ии до её описания или реализации (Ваш случай), то он делает предположение, что ф-я возвращает тип int, а инф. об её аргументах получает из контекста. Ситуация допустимая, но по"правилам хорошего тона" крайне не желательная (в силу ряда причин), о чём компилятор и сообщает во время работы.

loki
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.