Насколько я понимаю, C имеет make-файлы и включает в себя операторы, поэтому у вас нет файлов с единичным размером монстров, и вам следует функционально декомпозировать ваш код. Поэтому, если я прав, я должен иметь возможность выполнять функциональные вызовы для файлов .c, если я правильно делаю заголовки и выполняю их правильно.
Я пытаюсь это сделать, но, к сожалению, получаю ошибку.
Файлы имеют следующее содержимое:
Файл 1) test.c:
#include<stdio.h>
#include"suc.h"
main()
{
printf("Hello World\n\n");
printf("This is the number: %d \n\n", suc(6));
}
Файл 2) makefile:
CC=gcc
CFLAGS=-c -Wall
test: suc.o
$(CC) -Wall -o test test.c
suc.o: suc.c
$(CC) $(CFLAGS) suc.c
Файл 3) suc.h
#ifndef SUC_H_GUARD
#define SUC_H_GUARD
// returns the successor of i (i+1)
int suc(int i);
#endif
Файл 4) suc.c
#include "suc.h"
int suc(int i)
{
return i + 1;
}
Когда я делаю (make -B) вершину, я получаю:
gcc -c -Wall suc.c
gcc -Wall -o test test.c
test.c:7: warning: return type defaults to 'int'
/tmp/cc/7w7qCJ.o: In function 'main':
test.c: (.text+0x1d): undefined reference to 'suc'
collect2: ld returned 1 exit status
make: *** [test] Error 1
Тем не менее:
Оба дают ожидаемые результаты:
A) Эта отдельная файловая программа работает нормально!
#include<stdio.h>
main()
{
printf("Hello World\n\n");
printf("This is the number: %d \n\n", suc(6));
}
int suc(int i)
{
return i + 1;
}
B) Все файлы в оригинале, но со следующим изменением test.c:
#include<stdio.h>
#include"suc.h" //suc() is still defined b/c suc.h is included
main()
{
printf("Hello World\n\n");
printf("This is the number: %d \n\n", 4); //HERE! -> no function call
}
Помогите, пожалуйста и спасибо!
Я не совсем понимаю, о чем мне говорят сообщения об ошибках.