0
는 친절하게 다음의 코드 조각을 도와점프/분기 표
//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;
}
문제는 코드가 링크 오류로 Jmp_Handler_HELLO (무효) __cdecl 해결되지 않은 기호 무효를 컴파일 실패를인가 그러나 주 기능 코드의 첫 번째 줄을 제거하면 코드가 성공적으로 컴파일됩니다. 친절하게 도와주세요
이름을 모두 'HELLO'로 지정 했으므로이 이름은'Jmp_Handler_HELLO'입니다. –
tankyou하지만 불행히도 오타가 잘못되었습니다. 이것은 실제 상황과 관련이 없습니다. 감사합니다. – theadnangondal
'jmp_cmd_handlers.o'에서 링크하는 것을 잊었습니까? 거기에 정의되어 있어야하므로 ('nm jmp_cmd_handlers.o') 제대로되었는지 확인하십시오. –