gpt4 book ai didi

c - main 的多个定义 --> 如何只添加另一个标题中的一些函数?

转载 作者:太空宇宙 更新时间:2023-11-04 05:22:37 26 4
gpt4 key购买 nike

在 C 中,我得到了 `main' 的链接器错误多重定义。是的,这是真的,但是:

为什么链接器尝试包含第二个 (ext.c) 主函数,尽管我刚刚包含了头文件 ext.h?我希望链接器只链接原型(prototype)已找到或初始 main 需要的函数?

我该如何解决这个问题a) 测试编译和链接没有问题(只需使用 ext.c 中的 func())和b) ext.c 也可以作为单独的应用程序进行编译和链接吗?

(示例)代码:

//file: test.c
#include "/home/stefanm/test/test.h"

void main (int argc, char * argv[])
{
uint8_t var = 123;
printf ("main(): var= %i\n", var);
func (var);
}
//file: test.h
#ifndef TEST_H
#define TEST_H
#include <the rest>
#include "/home/stefanm/test/ext.h"
#endif

...和外部模块:

//file: ext.c
#include "/home/stefanm/test/ext.h"
uint8_t func (uint8_t i){
printf ("func(): Variable i is %i", i);
return 0;
}

void main () {
printf ("ext main func");
}
//file: ext.h
#ifndef EXT_H
#define EXT_H
#include "all needed headers"

uint8_t func (uint8_t);
#endif

我用 gcc test.c ext.c -o test 调用编译器

最佳答案

你的外部模块不应该有 main() 因为它是一个模块而不是一个应用程序。您应该将 main() 从您的模块移动到一个单独的文件中:

//file: app.c
#include "/home/stefanm/test/ext.h" // <-- BTW, using absolute paths is not a good idea

void main () {
//use function from ext here
printf ("app main func");
}

然后像这样编译你的应用程序:

gcc app.c ext.c

你的测试是这样的:

gcc test.c ext.c

关于c - main 的多个定义 --> 如何只添加另一个标题中的一些函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55188996/

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