gpt4 book ai didi

c - 仅公开 header 中一小部分函数

转载 作者:行者123 更新时间:2023-11-30 18:49:32 26 4
gpt4 key购买 nike

我有一个“头文件”(file1.h)具有多个函数原型(prototype)声明和一个具有关联函数定义的“C 文件”(file1.c)。

我只想将“头文件”(file1.h) 中的特定函数原型(prototype)公开到另一个“C 文件”(file2.c),而不公开其余函数。

问题1:最好的方法是什么?选项:创建另一个 header ,该 header 仅包含(file2.c)中包含的所需功能

问题2和3:extern什么时候会派上用场?我在头文件的某些函数中看到了 extern 的使用,而其他函数则不使用该关键字。有什么想法吗?

最佳答案

简单。对于“公共(public)”函数原型(prototype)/声明,请将它们放入 .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 隐藏属性,例如,在 Linux 上),以限制导出哪些符号。

最后,在编译后strip最终的二进制文件(即:strip --strip-unneeded myfile.so),一切就完成了。即使用户知道正在使用的 API,您的“私有(private)”符号也只能通过不可移植的 hack 直接访问。

享受吧!

关于c - 仅公开 header 中一小部分函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42542648/

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