如何只为其他特定的.c文件中的函数显示C函数?
假设我有一个foo1函数,它调用其他foo2函数(在不同的.c文件中),我想从我的main函数调用foo1,但我希望foo2对foo1以外的任何函数都是不可见的,如下所示:
/**
foo1.c
*/
void foo1()
{
if (condition_is_true){
foo2();
}
}
/**
foo2.c
*/
#include <stdio.h>
void foo2()
{
printf("Hello world!\n");
}
/**
main.c
*/
void foo1(void);
void foo2(void);
int main()
{
foo1();
foo2(); /*unresolved external*/
}
编译时
$ cc -omain main.c foo1.c foo2.c
我希望链接器抱怨“未定义引用`foo2'”。
答案 0 :(得分:0)
通常,如果要在另一个.c源文件中显示一个.c源代码文件中的函数,则将该函数的定义放入.h文件中并将其包含在您想要的.c文件中可见。例如:
file foo1.c
int somefunc1(some parameters)
{
Do some stuff.
}
file foo1.h
int somefunc1(some parameters);
file foo2.c
#include "foo1.h"
int foo2(Some parameters)
{
Do some stuff.
foo1(asdfasdf)
Do some more stuff.
}
这通常是你做的。但是,你所要求的恰恰相反。我不确定为什么在链接器运行时需要未定义的引用,但是您设置编译的方式,这些文件将被传递给链接器。所以你唯一能做的就是在文件列表中没有foo2.c。如果您正在使用其中一个主库中的某些内容,即使您未指定包含文件,它仍会被链接。例如:
$$$ ->more test3.c
int main(void)
{
printf("hello world\n");
return(0);
}
$$$ ->clang -std=c11 -Wall -Wextra -o test3 test3.c
test3.c:8:5: warning: implicitly declaring library function 'printf' with type 'int (const char *, ...)'
printf("hello world\n");
^
test3.c:8:5: note: please include the header <stdio.h> or explicitly provide a declaration for 'printf'
1 warning generated.
所以你要求的我并不认为可以或应该这样做。