我在C中创建一个共享库,但不知道源代码的正确实现是什么.
我想创建一个API,比如printHello,
int printHello( char * text );
Run Code Online (Sandbox Code Playgroud)
这个printHello函数将调用另一个函数:
在源文件libprinthello.c中,
void printHello( char * text )
{
printHi();
printf("%s", text);
}
Run Code Online (Sandbox Code Playgroud)
由于此printHello函数是用户或应用程序的接口:
在头文件libprinthello.h中,
extern void printHello( char * text);
Run Code Online (Sandbox Code Playgroud)
然后在printHi函数的源文件中,使用printhi.c
void printHi()
{
printf("Hi\n");
}
Run Code Online (Sandbox Code Playgroud)
那我的问题是,因为printHello是我想在用户中公开的唯一函数,我应该在printHi函数中做什么实现?
我还应该extern printHi函数的声明吗?
您可以使用两个单独的头文件:
在libprinthello.h:
#ifndef LIBPRINTHELLO_H /* These are include guards */
#define LIBPRINTHELLO_H
void printHello(char * text);
#endif
Run Code Online (Sandbox Code Playgroud)
在libprinthi.h:
#ifndef LIBPRINTHI_H
#define LIBPRINTHI_H
void printHi();
#endif
Run Code Online (Sandbox Code Playgroud)
在libprinthello.c:
#include "libprinthi.h"
#include "libprinthello.h"
void printHello(char * text)
{
printHi();
printf("%s", text);
}
Run Code Online (Sandbox Code Playgroud)
在libprinthi.c:
#include "libprinthi.h"
void printHi()
{
printf("Hi\n");
}
Run Code Online (Sandbox Code Playgroud)
然后,用户代码仅包含libprinthello.h,并且您libprinthi.h远离用户,使其printHi()不可见(用户代码也将链接到共享库):
#include "libprinthello.h"
int main()
{
printHello("Hello World!\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)