Таблица переходов / переходов в программировании на 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;
}
Проблема в том, что код не может быть скомпилирован с неразрешенным символом ошибки ссылки void __cdecl Jmp_Handler_HELLO(void) Однако, когда первая строка кода в основной функции удалена, код компилируется успешно. Пожалуйста, помогите
1 ответ
Решение
Нашел проблему. Каждый файл был ac-файлом (с расширением.c), за исключением основного файла, это был файл C++ (с расширением.cc). после изменения расширения основного файла он скомпилирован плавно. Однако я думаю, что он должен был быть скомпилирован раньше, может кто-нибудь может ответить, почему он не компилировался.
Спасибо @chris и @colonel за ваши ответы.