结构在C中充满了零

  • 本文关键字:结构 c global-variables
  • 更新时间 :
  • 英文 :


我有以下代码:

.h文件:

typedef struct subsystem
{
    const char* name;
    SDL_bool (*fun_init)();
    SDL_bool (*fun_updt)();
    SDL_bool (*fun_quit)();
    void (*fun_poll)(SDL_Event* event);
} subsystem_t;
subsystem_t audio_subsystem;

.c文件:

SDL_bool audio_init()
{
    SDL_Log("Audio Init");
    return SDL_TRUE;
}
SDL_bool audio_quit()
{
    SDL_Log("Audio Quit");
    return SDL_TRUE;
}
subsystem_t audio_subsystem = {"Audio", audio_init, NULL, audio_quit, NULL};

程序运行时,AUDIO_SUBSYSTEM具有以下数据(具有一些日志功能):

(null):: 00000000 :: 00000000 :: 00000000 :: 00000000

在运行时,名称为null,所有功能指针也为空,我不知道为什么会发生这种情况,C编译器正在用零填充我的结构。

这是日志函数:

SDL_Log("%s :: %p :: %p :: %p :: %p", subsystem->name, subsystem->fun_init, subsystem->fun_updt, subsystem->fun_quit, subsystem->fun_poll);

编辑:

在subsystem_t audio_subsystem解决我的我的 问题,我认为这是默认的大声笑。谢谢所有帮助的人 爱你们!

标题文件中的这一行:

subsystem_t audio_subsystem;

不仅是声明,它是文件范围时静态变量的定义,该变量将以零值初始化。此外,包括标头的每个编译单元都将定义其自己的audio_subsystem

显然,您的C文件不包括其标题,否则该行:

subsystem_t audio_subsystem = {"Audio", audio_init, NULL, audio_quit, NULL};

将被标记为相同符号的重新定义。

要解决错误,您可以将标题中的变量标记为使用extern关键字的声明:

extern subsystem_t audio_subsystem;

这只是声明一个没有数据的变量。标题文件的用户知道有这样的变量,并且在C文件中定义了变量本身(使用适当的初始评估器)。

(但也许您可以找到一个更好的设计,不需要共享全局变量。这也是很好的做法,C文件应包括自己的标题以捕获此类错误。)

相关内容

  • 没有找到相关文章

最新更新