gpt4 book ai didi

c - 使用 Makefile 重新定义问题

转载 作者:太空宇宙 更新时间:2023-11-04 09:47:08 25 4
gpt4 key购买 nike

ma​​in.c:

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

int main(void)
{

return(0);
} // end main

支持.c:

#include "proto.h"

\\ only function defintions

proto.h:

#ifndef proto
#define proto
double PI = 3.14159;
int LOOP_LIMIT = 90;

#endif

生成文件:

main: main.o  support.o 
gcc -lm -o main main.o support.o
main.o: main.c proto.h
gcc -c main.c
support.o: support.c proto.h
gcc -c support.c

每当我使用上面定义的文件运行 makefile 时,尽管有条件编译,我总是会遇到多重定义错误。

我不确定这里发生了什么以及如何解决这个问题。

错误信息是:

multiple definition of `PI'
multiple definition of `LOOP_LIMIT'

最佳答案

您不能在包含多个编译单元的 header 中定义变量。 PILOOP_LIMIT 最终同时出现在 main.osupport.o 中,因此您会遇到链接器错误.正确的做法是在 header 中声明它们 extern:

proto.h

#ifndef proto
#define proto
extern double PI;
extern int LOOP_LIMIT;

#endif

然后在一个且只有一个 .c 文件中定义它们:

support.c

#include "proto.h"

double PI = 3.14159;
int LOOP_LIMIT = 90;

\\ only function defintions

顺便说一句,看起来这些家伙可能是常量而不是变量,所以要么将它们声明并定义为 const,要么将它们写为预处理器定义:

#define PI 3.14159
#define LOOP_LIMIT 90

有了这些,您还可以避免链接问题。

关于c - 使用 Makefile 重新定义问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15168717/

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