2014-02-03 4 views
0

main.c: простая программа 'driver' для вызова функции sayHello() в модуле hello. Обратите внимание, что поскольку main.c не вызывает никаких стандартных функций ввода-вывода , у него не должно быть #include stdio.hMakeFile Пример

hello.h: предоставляет прототип функции sayHello(); не забудьте включите охрану

hello.c: реализует функцию sayHello(). Это единственный файл, который имеет #include stdio.h

Вот мой Makefile: (б/н 'пакет' части)

hello: hello.o main.o 
    gcc main.o hello.o -o hello 
main.o: main.c hello.h 
    gcc -c main.c -o main.o 
hello.o: hello.c hello.h 
    gcc -c hello.c -o hello.o 
test: hello 
    ./hello 
clean: 
    rm -f *.o hello 

Мой файл hello.c является:

#include<stdio.h> 
#include "main.c" 
int main() 
{ 
    sayHello(); 
    return 0; 
} 

Мой файл hello.h является:

void sayHello(void); 

Мой файл main.c является:

#include "hello.h" 
void sayHello(void) 
{ 
    puts("Hello,World!"); 
    return; 
} 

Я проверил это, и он отобразил «Привет, мир!». Но когда я запустил его снова на всякий случай, были ошибки. Какие-нибудь идеи, что могло бы произойти?

+5

Я понятия не имею, что вы просите. – MadScientist

+2

Добро пожаловать в SO. Пожалуйста, прочитайте справку, чтобы узнать, что и как задавать вопросы, здесь. http://stackoverflow.com/help/how-to-ask –

+0

Вы должны вызывать 'sayHello()' из 'main.c' и реализовывать эту процедуру в' hello.c'. – yegorich

ответ

1

hello.c и hello.h - это своего рода библиотека. hello.h обеспечивает функцию sayHello() для мира, и эта функция реализована в hello.c. Это означает, что hello.c должны иметь следующие включают:

#include "hello.h" 

и

#include <stdio.h> 

main.c должен только:

#include "hello.h" 

Я думаю, что "охрана" должен быть function prototype в hello.h:

void sayHello(void); 
0

Вы, кажется, задаете несколько вопросов, не осознавая этого.

Давайте посмотрим на него один за другим. Ваше задание состоит в том, чтобы сделать проект, отделить программу, которая вызывает функцию и реализацию функции, в отдельные части исходного кода. Вот почему у вас есть ограничение на #include и спецификацию include-файла. Вам также предлагается сгенерировать Makefile для компиляции различных файлов исходного кода в одну программу и предоставить базовые средства, такие как сжатие исходного кода в zip-файл или удаление объектных файлов. Назначение предназначено для ознакомления с модульной и автоматизированной компиляцией и разделением функций на отдельные части.

Если вы хотите узнать о программировании, то самое лучшее, что вы можете сделать, это потратить некоторое усилие на поиск простых файлов и компиляции. Я мог бы дать вам ответ, но не буду, пока вы не попытаетесь какое-то время. Вы узнаете больше от неудачных попыток, чем заглядываете в ответы.

Одним словом, вы должны сначала создать исходный код, выяснить, как отделить функцию sayHello и главную функцию в двух разных исходных файлах и экспортировать определение функции через включенный файл. Вторая проблема, с которой вы столкнулись, - это дизайн файла make, который довольно точно определяет ваше задание, все, что вам нужно сделать, это узнать о языке конфигурации файла make и переписать формулировку, сформулированную человеком, в формат make. Вы выиграете от поиска «учебника по make-файлу» и прочтения первой части результатов. ... Я предполагаю, что вы хотите узнать все это, а не просто получить ответы без работы. Хотя делать файлы могут быть сложными, хорошей новостью является то, что на этом уровне они довольно тривиальны.

PS Попробуйте посмотреть здесь: http://mrbook.org/tutorials/make/

+0

Я думаю, что я на что-то. Я просто отправляю то, что у меня есть здесь? – user3267385

+0

Конечно, вперед, я думаю, вы можете добавить его к своему вопросу, но я не очень хорошо знаю правила SO. – Martin

+0

@ user3267385 Пока все выглядит нормально, кроме того, что у вас нет цели «пакета». О, и лучше всего протестировать его в действии. – Martin

Смежные вопросы