C编程中的跳转/分支表



请帮助我处理下面的代码

//jmp_common.h
typedef void (*jmp_Handler_t)(void);
#define JMP_CMD_HANDLER(com)    extern void Jmp_Handler_##com(void)
#define JMP_DEF_COM(com) extern void Jmp_Handler_##com(void);
#include "jmp_cmd_list.h"
#undef JMP_DEF_COM
typedef struct JmpStruct
{
    char * name;
    jmp_Handler_t handler;
}JmpStruct_t;
/*********************************/
/*********************************/
//jmp_cmd_list.h
JMP_DEF_COM(HELLO)
JMP_DEF_COM(WORLD)
/*********************************/
/*********************************/
//jmp_cmd_handlers.c
#include "jmp_common.h"
JMP_CMD_HANDLER(HELLO)
{
    int a = 100;
}
JMP_CMD_HANDLER(WORLD)
{
    int a = 100;
}
/*********************************/
/*********************************/
//main.c
#include "jmp_common.h"
#define JMP_DEF_COM(com) { #com , Jmp_Handler_##com },
const JmpStruct_t JumpTable[/*JMP_CMD_MAX*/2] = {
#include "jmp_cmd_list.h"
};
int main(void)
{
    JumpTable[0].handler();
    return 0;
}

问题是代码由于链接错误而无法编译__cdecl Jmp_Handler_HELLO(void)但是,当主函数中的第一行代码被删除时,代码将成功编译。请帮助

找到问题。每个文件都是c文件(.c扩展名),除了主文件是c++文件(.c扩展名)。cc扩展)。修改主文件扩展名后,编译顺利。然而,我认为它应该编译之前,可能有人可以回答为什么它没有编译。

感谢@chris和@colonel的回复。

最新更新