是否可以从程序集文件引用C枚举?

是否可以从程序集文件引用C枚举?,c,enums,nasm,header-files,C,Enums,Nasm,Header Files,syscalls.h enum Syscall { OPEN_FILE, READ_FILE, CLOSE_FILE }; syscalls.s extern WRITE_TO_SCREEN global write_to_screen write_to_screen: mov eax, WRITE_TO_SCREEN mov ebx, [esp+4] int 0x80 ret 给我这个错误: stdlib/syscalls.o: In function `wri

syscalls.h

enum Syscall {
  OPEN_FILE,
  READ_FILE,
  CLOSE_FILE
};
syscalls.s

extern WRITE_TO_SCREEN
global write_to_screen
write_to_screen:
  mov eax, WRITE_TO_SCREEN
  mov ebx, [esp+4]
  int 0x80
  ret
给我这个错误:

stdlib/syscalls.o: In function `write_to_screen':
stdlib/syscalls.s:(.text+0x1): undefined reference to `WRITE_TO_SCREEN'
make: *** [kernel.elf] Error 1
不,没有。
您可以这样做:

enum_support.h syscalls.h 然后让
test.c
test.s
包含
syscalls.h

gcc-c test.c

gcc-c测试.s

我不确定这是否很有用,但我不知道有什么其他方法可以共享枚举(在汇编中不存在)。
您可以执行
cpp test.c
cpp-D\u汇编程序\uuuu test.s
来查看发出的代码

#ifdef __ASSEMBLER__
#define ENUM_START
#define ENUM_VALUE(key,value) .equ key,value
#define ENUM_END(typename)
#else
#define ENUM_START typedef enum{
#define ENUM_VALUE(key,value) key=value,
#define ENUM_END(typename)} typename;
#endif
#include "enum_support.h"

ENUM_START
ENUM_VALUE(OPEN_FILE,0)
ENUM_VALUE(READ_FILE,1)
ENUM_VALUE(CLOSE_FILE,2)
ENUM_END(Syscall)