gpt4 book ai didi

c - 对名为 'full_adder(BIT A, BIT B, BIT Ci, BIT *Co)' 的函数的 undefined reference

转载 作者:行者123 更新时间:2023-11-30 17:58:04 27 4
gpt4 key购买 nike

我是一名计算机科学学生,学习如何用 C 语言编程。我有 3 个文件和一个 Makefile。我有

logic.c logic.h main.c

logic.c 的顶部是:

 #include "logic.h" 
//use this function in 4 bit adder
//BIT full_adder(BIT A, BIT B, BIT Ci, BIT *Co);
int adder(int O1, int O2, BIT carryIn, BIT *carryOut){
printf("in adder");
return 0x0;
}


BIT full_adder(BIT A, BIT B, BIT Ci, BIT *Co){
BIT S = FALSE;
//implementation of if else's based on Truth Table <br>
if((A==FALSE)&&(B==FALSE)&&(Ci==FALSE)){
S=FALSE;
*Co = FALSE;
} <br>
return S;
}

main.c 的顶部是:

 #include "logic.h"
BIT full_adder(BIT A, BIT B, BIT Ci, BIT *Co);

在 main.c 中我有我的主函数,在主函数的底部我有:

 assert((full_adder(FALSE,FALSE,FALSE,&Co)==FALSE) && (Co==FALSE));
adder(FALSE,FALSE,FALSE,&Co2);
return 0;

我收到错误:

 main.o: In function 'main': main.c:158: undefined referenceto 'full_adder' 

collect2: ld returned 1 exit status <br>
make: *** [pa3] Error 1 <br>
./bscript: line 3: pa3: command not found

这是家庭作业,但我在这个问题上花了很多时间,并且正在寻求一些帮助。我有加法器 full_adder 的正确返回类型,并且我在logic.c 和 main.c 的顶部声明了该函数。

没有回答我的问题的问题是:

感谢任何帮助。

编辑:logic.c 正在被编译并且它确实创建了一个logic.o 文件。

编辑:我的教授说我无法编辑logic.h

编辑:makefile:

# Makefile template for CS 270 (specialized for PA3) 

# List of files
C_SRCS = main.c logic.c
C_OBJS = main.o logic.o
C_HEADERS = logic.h
OBJS = ${C_OBJS}
EXE = pa3

# Compiler and loader commands and flags
GCC = gcc
GCC_FLAGS = -g -std=c99 -Wall -O0 -c
LD_FLAGS = -g -std=c99 -Wall -O0
# Target is the executable
pa3 : $(OBJS)
@echo "Linking all object modules ..."
$(GCC) $(LD_FLAGS) $(OBJS) -o $(EXE)
@echo ""
# Recompile C objects if headers change
${C_OBJS}: ${C_HEADERS}
# Compile .c files to .o files
.c.o:
@echo "Compiling each C source file separately ..."
$(GCC) $(GCC_FLAGS) $<
@echo ""

# Clean up the directory
clean:
@echo "Cleaning up project directory ..."
rm -f *.o $(EXE) core a.out
@echo ""

编辑:我用脚本编译我的代码:

#!/usr/bin/sh
make
pa3

最佳答案

首先,将定义与声明分开:

逻辑.h:

#ifndef _LOGIC_H_
#define _LOGIC_H_

/* Define BIT as before */

int adder(int O1, int O2, BIT carryIn, BIT *carryOut);
BIT full_adder(BIT A, BIT B, BIT Ci, BIT *Co);


#endif

逻辑.c:

#include <stdio.h>
#include "logic.h"

int adder(int O1, int O2, BIT carryIn, BIT *carryOut){
printf("in adder");
return 0x0;
}

BIT full_adder(BIT A, BIT B, BIT Ci, BIT *Co){
BIT S = FALSE;
//implementation of if else's based on Truth Table
if((A==FALSE)&&(B==FALSE)&&(Ci==FALSE)){
S=FALSE;
*Co = FALSE;
}

return S;
}

main.c:

#include "logic.h"

int main(int argc, char* argv[]) {
/* Do your stuff */
return 0;
}

现在事情已经到了应有的位置,您的 logic.h 向编译器提供了所需的信息。

你的makefile不应该只需要这三个文件就需要任何花哨的东西。

这需要通过 makefile 完成:

gcc -c -o main.o main.c
gcc -c -o logic.o logic.c
gcc -o main main.o logic.o

(您在 full_adder 中遇到的逻辑问题留给您自己解决...)

关于c - 对名为 'full_adder(BIT A, BIT B, BIT Ci, BIT *Co)' 的函数的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12516019/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com