Включение функций в C с использованием заголовка и дополнительных файлов C - PullRequest
3 голосов
/ 20 сентября 2010

Попытка вызова функции из другого файла в C со следующим кодом:

main.c

#include "display.h"
int main()
{
display_options();
display_price();

return 0;
}

display.h

int display_options(void);
int display_price(void);

display.c

#include <stdio.h>

int display_options()
{
printf("Welcome to the pizza parlor\n");
printf("What size pizza would you like? (in inches)");

return 0;
}

int display_price()
{
printf("Your pizza will cost 0.00\n");

return 0;
}

Я создал это, следуя приведенному здесь примеру http://www.faqs.org/docs/learnc/x307.html, но, похоже, он не работает. Я получаю сообщение об ошибке в кодовых блоках 10.05 о функции, вызываемой в main.c и говорящей "неопределенная ссылка на 'display_options' "

Ответы [ 5 ]

3 голосов
/ 20 сентября 2010

Похоже, вы компилируете только файл main.c.

Убедитесь, что вы компилируете как:

gcc -Wall main.c display.c

и запустите его как:

./a.out
1 голос
/ 20 сентября 2010

Убедитесь, что #include "display.h" также находится вверху файла display.c. Поскольку вы используете Code :: Blocks, он автоматически скомпилирует main.c и display.c для вас, как только вы это сделаете.

0 голосов
/ 20 сентября 2010

В Code :: Blocks вам нужно убедиться, что display.c есть в вашем проекте (если вы еще не создали проект, сделайте это сейчас) и что оно также включено в одну или несколько целей сборки.Цели сборки debug и release создаются по умолчанию, но ничего не добавляется к цели, если вы не скажете это.Когда вы создаете новый файл или добавляете существующий файл в проект, IDE должна спросить вас, к каким целям добавить файл.Выберите все из них и нажмите ОК.

Если ваш файл уже находится в проекте, но не включен ни в одну цель, перейдите к Проект |Свойства |Построить цели и убедиться, что на панели Построить файлы цели отображаются галочки рядом с main.c и display.c.

0 голосов
/ 20 сентября 2010

display.c

#include <stdio.h>

int display_options(void);
int display_price(void);
int display_options()
{
printf("Welcome to the pizza parlor\n");
printf("What size pizza would you like? (in inches)");

return 0;
}

int display_price()
{
printf("Your pizza will cost 0.00\n");

return 0;
}

Теперь включите прямой display.c

в основной файл вместо display.h

0 голосов
/ 20 сентября 2010

gcc позволяет скомпилировать и связать тривиальное приложение (имеет только 1 файл .c) за один шаг.

Для приложений с более чем одним файлом .c необходимо скомпилировать весь исходный код (.в) файлы в объектные (.o) файлы.Затем они должны быть связаны друг с другом.

Так что вам нужно будет скомпилировать каждый файл .c

gcc -c main.c
gcc -c display.c

и затем связать их, используя

gcc -o display main.o display.o

двоичный файл display

Это можно автоматизировать с помощью Makefile.Затем вы создаете все это, просто вызывая make.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...