gpt4 book ai didi

c - 如何调用静态函数

转载 作者:太空宇宙 更新时间:2023-11-04 01:32:03 24 4
gpt4 key购买 nike

我正在尝试调用以下函数

在 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;
}
}

来自矩阵.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

那么,我的问题是,如何正确调用此函数?

最佳答案

你一定不知道关键字static是什么意思。 staticcreate_new_account 全局保留为 daydream.c。没有其他人可以访问它。如果你想让其他函数访问它:

  1. matrix.c中移除关键字staticextern

    Option 1:

    /* daydream.c */
    int create_new_account(void)
    {
    ...
    }

    /* matrix.c */
    extern create_new_account(void);

    Option 2:

    /* daydream.c */
    int create_new_account(void)
    {
    ....
    }

    /* daydream.h */
    extern int create_new_account(void);

    /* matrix.c */
    #include "daydream.h"
  2. 创建一个外部包装函数来调用它,进而调用您的 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。

关于c - 如何调用静态函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20831024/

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