我有一个汇编文件(asm.S
),它需要在C头文件(c_decls.h
)中保持不变的#define
'd。除了我想要的#define
之外,头文件还包含C函数声明。不幸的是,当试图编译程序集文件时,gcc
barfs。例如,#include包含C声明的程序集文件中没有错误?
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
输出
> 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'
有没有一种办法#include
包含程序集文件中函数声明的C头文件? (更改头部或移动/重新定义#define
不是一个选项。)
您.S文件使用
在你.C文件使用
然后(更改标题或移动/重新定义#define不是一个选项。) 请参阅因为你已经取消了最合理的选择资格,我会说你运气不好。 :-) – asveikau 2011-02-08 00:14:48
考虑到头文件调用了未定义的行为(通过使用以双下划线开头的名称作为其多重包含守卫),我认为你应该重新考虑不改变它的要求。 :-) – 2011-02-08 00:32:14