【发布时间】:2012-10-25 18:47:17
【问题描述】:
这在翻译中有点丢失,所以我会更准确: 我们有类 recursion.c、fib.c 和 countUp.c。从 recursion.c 我们必须递归调用 fib.c 或 countUp.c,由输入参数决定。我不能使用头文件,只能放置原型:
int fib(int n);
和
void countUp(int n);
我的 Makefile
TAR = tar
COMPILER_FLAGS = -g -Wall -std=c99 -c
LINKER_FLAGS = -g -o
OBJS = recurse.o
C_FILES = recurse.c fib.c countUp.c
ASM_FILES = recurse.asm
TARGET_FILE = recurse
TARGET_TAR = PA5.tar
$(TARGET_TAR): $(TARGET_FILE)
$(TAR) -cvf $(TARGET_TAR) $(C_FILES) $(ASM_FILES) $(TARGET_FILE) Makefi$
recurse.o: recurse.c
$(C_COMPILER) $(COMPILER_FLAGS) $(C_FILES)
$(TARGET_FILE): $(OBJS)
$(LD_LINKER) $(LINKER_FLAGS) $(TARGET_FILE) $(OBJS)
其中 fib 和 countUp 类方法必须递归调用。 recursive.c 文件被认为是我们的 c 驱动程序。不要创建或实现除标准 c 头文件(stdio.h、string.h 等)之外的任何头文件。当我尝试运行它时,我得到:
make
gcc -g -o recurse recurse.o
recurse.o: In function `main':
(file root location)/recurse.c:43: undefined reference to `fib'
(file root location)/recurse.c:46: undefined reference to `countUp'
collect2: ld returned 1 exit status
make: *** [recurse] Error 1
任何线索。
原问题: 我有多个 C 文件,我将它们组合成一个可执行文件。例如说我有 math.c,参数被传递给它,然后如果输入参数调用 add 它执行 add.c 中的函数,如果参数调用 subtract 它将调用 subtract.c 中的函数等。文件然后编译成 .o 文件,然后创建一个可执行文件。我遇到的问题是无法使用标头 (.h) 文件。有什么办法可以闯入单独的班级还是我错过了什么?我真的不知道如何问这个问题,就 C 而言,行话很糟糕,抱歉:(
我想我真的不明白司机的想法。 (不是设备驱动,她一直告诉我们这是一个 c 可执行驱动)。
【问题讨论】:
-
我遇到的问题是无法使用标头 (.h) 文件 - 为什么会出现这种情况?你当然可以
#include任何你喜欢的文件类型,但它可能会导致名称冲突等等,通常被认为是不好的做法。 -
这是家庭作业吗?在这种情况下,您的老师可能试图让您展示您对“外部”关键字的掌握。
-
抱歉忘记标记作业,不是在寻找确切的答案。我们必须在没有 .h 文件的情况下在我们的硬件任务中执行它,这是我迷路的地方。我们正在练习递归,我们必须从我们的 recursive.c 主文件中调用递归 .c 文件。还没有在课堂上与外部人员合作过
-
作业标签正在被移除;你可以指定你不是在你的问题中寻找确切的答案。你能告诉我们你正在使用什么代码吗?你不能
#include似乎不对。用gcc -E编译(它只做预处理,但没有别的),看看你的头文件是否被拉入。 -
这太本地化了,在实际应用中没有任何用途,对以后的读者也没有帮助。
标签: c methods compilation prototype