我正在尝试调用以下函数
在daydream.c中:
.....
static int create_new_account(void)
{
DDPut(sd[newucstr]);
switch (HotKey(HOT_NOYES)) {
case 1:
if (CreateNewAccount()) {
clog.cl_userid = user.user_account_id;
clog.cl_firstcall = user.user_firstcall;
clog.cl_logon = time(0);
if (user.user_connections == 0)
clog.cl_flags |= CL_NEWUSER;
clog.cl_bpsrate = bpsrate;
getin();
return 1;
}
return 0;
case 2:
DDPut("\n");
return 0;
default:
return 1;
}
}
来自matrix.c:
int apply()
{
create_new_account();
}
但是,它不会编译链接:
matrix.o: In function `apply':
matrix.c:(.text+0xf0): undefined reference to `create_new_account'
collect2: error: ld returned 1 exit status
make: *** [daydream] Error 1
所以,我的问题是,如何正确调用此函数?
答案 0 :(得分:4)
您无法知道关键字static
的含义。 static
仅将create_new_account
全局保留到daydream.c
。没有其他人可以访问它。如果您希望其他功能访问它:
将此关键字static
和extern
移至matrix.c
。
选项1:
/* daydream.c */
int create_new_account(void)
{
...
}
/* matrix.c */
extern create_new_account(void);
选项2:
/* daydream.c */
int create_new_account(void)
{
....
}
/* daydream.h */
extern int create_new_account(void);
/* matrix.c */
#include "daydream.h"
创建一个外部包装函数来调用它,然后调用static
函数。
/* daydream.c */
static int create_new_account(void)
{
...
}
int create_new_account_wrapper(void)
{
return create_new_account();
}
/* matrix.c */
int apply(void)
{
return create_new_account_wrapper();
}
我的偏好是答案1,选项2。