【发布时间】:2011-06-23 03:07:02
【问题描述】:
我有一个汇编文件 (asm.S),它需要一个常量 #define'd 在 C 头文件 (c_decls.h) 中。除了我想要的 #define 之外,头文件还包含 C 函数声明。不幸的是,gcc barfs 在尝试编译程序集文件时。例如,
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:汇编程序消息:
c_decls.h:6:错误:表达式后出现垃圾 '(int bar)'
c_decls.h:6: 错误:'int' 的后缀或操作数无效
有没有办法#include 在汇编文件中包含函数声明的 C 头文件? (更改标题或移动/重新定义#define 不是一种选择。)
【问题讨论】:
-
(更改标题或移动/重新定义#define 不是一个选项。)看到您取消了最合理的选项的资格,我会说您不走运。 :-)
-
考虑到标头正在调用未定义的行为(通过使用以双下划线开头的名称作为其多重包含保护),我认为您应该重新考虑不更改它的要求。 :-)
标签: c gcc assembly include x86