gpt4 book ai didi

c - makefile : it doesn't behave the way I've been taught it should and I'm not sure what to do 出现问题

转载 作者:行者123 更新时间:2023-11-30 18:44:09 26 4
gpt4 key购买 nike

我正在为 C 语言类(class)开展一个项目。这个想法是使用不同源文件中设置的函数创建 mandelbrot 集的可视化,并使用 header 和 makefile 链接在一起。我可以确认 complex.c(如下)100% 正常工作,并且编译时没有警告或错误。然而,对于这个项目,我已将类型定义移至头文件中,并且我的 main.c 文件中有一个“虚构”类型的全局变量。该全局变量由我的 mandelbrot.h 头文件引用。

当我尝试使用 makefile 进行编译时,出现两个错误。这些错误是:

1. "error: unknown type name "img""

这发生在我移动“typedef struct{}img;”之后到头文件。

2. Undeclared variable c referenced for first time at line <whatever> in mandelbrot.c

我在 main.c 中声明了 img c,并在 mandelbrot.h 中声明了 extern img c。我不知道这是怎么回事,因为我们的教授明确表示在 main.c 中将变量声明为全局变量,然后通过 mandelbrot.h 中的 extern 引用它,以便可以在 mandelbrot.c 中看到它

我试图明确地表达出来,因为如果我做错了什么,我想跟踪并找到它(而且我们应该使用显式的 makefile,而不是使用特殊变量,例如 $(CC) 等。最后可执行文件是 mandelbrot。

mandelbrot: main.o mandelbrot.o complex.o
gcc -o -Wall mandelbrot main.o mandelbrot.o complex.o

main.o: main.c complex.h mandelbrot.h
gcc -c main.c

mandelbrot.o: mandelbrot.c complex.h mandelbrot.h
gcc -c mandelbrot.c

complex.o: complex.h complex.c
gcc -c complex.c -lm

clean:
rm *.o

这是我的源代码(所有标题还包括我的函数原型(prototype),但我没有复制它们):

//complex.h
//Components of complex number.
typedef struct{
float r;
float j;
} img;

这是源文件:

//complex.c
#include <stdio.h>
#include <math.h>

img function(c){
//does something with the global variable c
}

我有第二个函数,它正在处理涉及 mandelbrot 集的一些检查。该函数位于一个单独的文件中,并具有:

//mandelbrot.h
//Reference an external global variable.
extern img c;

源文件:

//mandelbrot.c
#include "complex.h"
img mandelbrot(int n){
//Code that does stuff
if (absolute_value(c, n-1) > 1000000){
//does something
}
}

我有最后一个源文件:

//main.c
#include "mandelbrot.h"
#include "complex.h"
img c;

main(){
//does some stuff.
}

最佳答案

  1. 可以通过输入 #include "complex.h" 来修复(由 C 保留,使用其他内容)在 mandelbrot.h 中.

  2. 可以通过输入 #include "mandelbrot.h" 来修复里面mandelbrot.c并删除 #include "complex.h"来自mandelbrot.cmain.c .

  3. 可以通过输入 #include "complex.h" 来修复在complex.c .

  4. 可以通过更改 -o -Wall mandelbrot 来修复至-o mandelbrot -Wall .

您确实需要开始使用 header 防护。

关于c - makefile : it doesn't behave the way I've been taught it should and I'm not sure what to do 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58903948/

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