如何调用静态函数

时间:2013-12-29 22:56:45

标签: c

我正在尝试调用以下函数

在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

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

1 个答案:

答案 0 :(得分:4)

您无法知道关键字static的含义。 static仅将create_new_account全局保留到daydream.c。没有其他人可以访问它。如果您希望其他功能访问它:

  1. 将此关键字staticextern移至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"
    
  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();
    }
    
  3. 我的偏好是答案1,选项2。