gpt4 book ai didi

C:如果已经定义,则忽略函数的第二个定义

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

我有两个用 C 编写的文件,其中第一个文件包含几个已在第二个文件中实现的函数的不同实现。有什么方法可以告诉 clang——“如果某个函数已经在 File1 中实现,则使用该实现而不是 File2 实现” ?我知道这是一个糟糕的想法,脆弱、晦涩……但我仍然想知道编译器是否对这种误用/滥用持开放态度?

最佳答案

如果你把次级函数放在一个库中,并链接到高级函数的目标文件和这个库,链接器将忽略次级函数。

编辑:

这是“so1.c”:

#include <stdio.h>

void f(void) {
puts("One.");
}

这是“so2.c”:

#include <stdio.h>

void f(void) {
puts("2!");
}

这是“som.c”(f() 的声明可能在一个额外的头文件中):

void f(void);

int main(void) {
f();
return 0;
}

这些是检查这个的命令:

clang -c so1.c -o so1.o
clang -c so2.c -o so2.o
clang -c som.c -o som.o
ar r so1.lib so1.o
ar r so2.lib so2.o
clang so1.o so2.o som.o -o so12
clang so1.lib so2.o som.o -o so_2
clang so1.o so2.lib som.o -o so1_
so_2
so1_

clang so1.o so2.o som.o -o so12 没有链接,并给出了预期的错误。

两个可执行文件都按预期工作。

关于C:如果已经定义,则忽略函数的第二个定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56476846/

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