汇编文件中带有 C 声明的 #include 标头没有错误?
我有一个汇编文件 (asm.S
),它需要 C 头文件 (c_decls.h
) 中的常量 #define
。除了我想要的#define 之外,头文件还包含 C 函数声明。不幸的是,gcc
在尝试编译汇编文件时遇到了问题。例如,
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
不是一个选项。)
I have an assembly file (asm.S
) which needs a constant #define
'd in a C header file (c_decls.h
). The header file contains C function declarations in addition to the #define
I want. Unfortunately, gcc
barfs when trying to compile the assembly file. For example,
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'
Is there a way to #include
a C header file that contains function declarations in an assembly file? (Changing the header or moving/redefining the #define
is not an option.)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用
cpp
的-dM
选项仅从头文件中获取 #defines,并包含该文件。现在将
bare_c_decls.h
添加到您的 .S 文件中。如果您无法更改 .S 文件中的 #include,请在另一个目录中生成裸头文件,并将该包含路径放在编译器/汇编器命令行上,放在其他所有内容之前。最后,您可以将这一切包装在一个 makefile 中,以便自动生成“裸”头文件。
Use the
-dM
option forcpp
to get just the #defines out of your header files, and include that file instead.Now include
bare_c_decls.h
in your .S file. And if you can't change the #include in the .S file, generate the bare header files in another directory, and put that include path on your compiler/assembler command line, ahead of everything else.And finally, you can wrap this all up in a makefile so your "bare" header files are generated automatically.
这很简单:
在您的 .S 文件中使用
在您的 .C 文件中使用
然后在 .h 文件中放置条件
That's simle:
In your .S file use
In your .C file use
Then in .h file place condition