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

时间:2019-06-06 11:42:39

标签: c include clang llvm-clang

我有两个用C编写的文件,其中第一个文件包括已经在第二个文件中实现的几个功能的不同实现。有没有办法告诉clang -“如果某个功能已经在File1中实现,则使用该实现而不是File2实现”?我知道这是一个可怕的想法,脆弱,晦涩难懂……但是我仍然想知道编译器是否可以接受这种滥用/滥用行为?

1 个答案:

答案 0 :(得分:-1)

如果将劣等功能放在库中并同时链接优等功能的目标文件和该库,则链接器将忽略劣等功能。

编辑:

这是“ 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行未链接,并出现错误,如预期。

两个可执行文件都能正常工作。