Tôi có một tập tin lắp ráp (asm.S
) cần một hằng số #define
'd trong một tập tin tiêu đề C (c_decls.h
). Tệp tiêu đề chứa các khai báo hàm C ngoài số #define
mà tôi muốn. Thật không may, gcc
barfs khi cố gắng biên dịch tập tin lắp ráp. Ví dụ,#include tiêu đề có khai báo C trong tệp lắp ráp không có lỗi?
c_decls.h
#ifndef __c_decls_h__
#define __c_decls_h__
#define I_NEED_THIS 0xBEEF
int foo(int bar);
#endif
asm.S
#include "c_decls.h"
.globl main
main:
pushl %ebp
movl %esp, %ebp
movl $I_NEED_THIS, %eax
leave
ret
Output
> gcc -m32 asm.S
c_decls.h: Assembler messages:
c_decls.h:6: Error: junk '(int bar)' after expression
c_decls.h:6: Error: suffix or operands invalid for 'int'
Có cách nào để #include
tệp tiêu đề C có chứa khai báo hàm trong tệp assembly? (Thay đổi tiêu đề hoặc di chuyển/xác định lại số #define
không phải là một tùy chọn.)
(Thay đổi tiêu đề hoặc di chuyển/xác định lại #define không phải là một tùy chọn.) Xem ing khi bạn đã loại bỏ các tùy chọn hợp lý nhất, tôi muốn nói rằng bạn đang ra khỏi may mắn. :-) – asveikau
Xem xét rằng tiêu đề đang gọi hành vi không xác định (bằng cách sử dụng tên bắt đầu bằng dấu gạch dưới kép làm bảo vệ đa phần của nó), tôi nghĩ bạn nên xem xét lại yêu cầu không thay đổi nó. :-) –