我想只从"头文件"中公开特定的函数原型。 (file1.h)到另一个" C文件" (file2.c)没有暴露其余的功能。
问题1:最好的方法是什么? 选项:创建另一个标头,其中只包含(file2.c)中包含的所需功能问题2& 3:什么时候会extern
派上用场?
我在头文件中的某些函数中看到了extern
的使用,而其他函数没有使用该关键字。这个想法是什么?
答案 0 :(得分:2)
易。对于" public"函数原型/声明,将它们放在.h
文件中。
<强> func.h
强>
int func1(void);
int func2(int i);
对于您不想曝光的功能,只需将它们放在.c
文件中即可。
<强> func.c
强>
/* Function prototypes. */
static int func3(void);
/* Function definitions. */
int func1(void) {
func3();
return 0;
}
int func2(int i) {
func3();
return (i + i);
}
static int func3(void) {
return 42;
}
接下来,根据您的编译器,设置exported symbol whitelist(例如:gcc hidden attributes
,例如,在Linux上),以限制导出的符号。
最后,strip
编译后的最终二进制文件(即:strip --strip-unneeded myfile.so
),并且您已全部设置完毕。即使用户知道正在使用的API,您的&#34;私人&#34;符号只能通过非便携式黑客直接访问。
享受!
答案 1 :(得分:0)
公开API中的一些函数(这是Motif GUI库如何做)的一种常见方法是在MyThing.h中为公共可用函数放置原型,然后将其余函数放在MyThingI.h中, #includes MyThing.h,你的.c文件包含MyThingI.h(我是内部的)。这样,您自己的代码可以包含多个包含I.h文件的文件,而随库提供的公共.h文件只包含.h文件。
.h文件中的所有原型都应使用“extern”关键字。