你能在汇编中添加预处理器指令吗?

时间:2015-05-19 13:32:04

标签: c assembly c-preprocessor

我想根据头文件中的定义执行一些汇编指令。

让我们说05-19 17:56:27.213 9768-9768/com.emaarIt.app.Bernoulli E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.IllegalStateException: Activity has been destroyed at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1358) at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595) at android.support.v4.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:578) at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:139) at android.support.v4.view.ViewPager.setAdapter(ViewPager.java:415) at com.emaarIt.app.Bernoulli.activities.ProjectGalleryActivity.setSIAdapter(ProjectGalleryActivity.java:225) at com.emaarIt.app.Bernoulli.webservice.modules.ProjectGalleryAsync.onPostExecute(ProjectGalleryAsync.java:78) at com.emaarIt.app.Bernoulli.webservice.modules.ProjectGalleryAsync.onPostExecute(ProjectGalleryAsync.java:32) at android.os.AsyncTask.finish(AsyncTask.java:602) at android.os.AsyncTask.access$600(AsyncTask.java:156) at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4441) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) at dalvik.system.NativeStart.main(Native Method) 我有test.h

#define DEBUG中,我想以某种方式检查test.asm做某事......

这样的事情可能吗?我无法在类似问题或网上找到有用的东西。

3 个答案:

答案 0 :(得分:5)

是的,您可以在asm文件上运行C预处理器。取决于您的构建环境如何执行此操作。例如,gcc会自动为扩展名为.S(资本)的文件运行它。请注意,无论您包含什么,都应该兼容asm。通常的做法是使用#ifndef ASSEMBLY或类似的结构有条件地包含标题的一部分,因此您可以在同一标题中包含C和ASM部分。

答案 1 :(得分:4)

C预处理器只是一个输入数据(C源文件),转换数据并再次输出数据的程序(翻译单元)。

您可以像这样手动运行:

gcc -E < input > output

这意味着如果您愿意,可以在.txt文件或乳胶文件上运行C预处理器。

当然,困难的一点是如何将它集成到您​​的构建系统中。这在很大程度上取决于您使用的构建系统。如果涉及makefile,则为汇编程序文件创建目标:

assembler_file: input_1 input_2
        gcc -E < $^ > $@

然后编译&#34; assembler_file&#34;以任何方式你通常编译它。

答案 2 :(得分:2)

当然但这不再是汇编语言,你需要通过一个C预处理器来提供它,它也知道这是一个混合的C / asm文件并执行c预处理部分但是没有尝试编译,然后它被提供给到汇编程序或内置自己的汇编程序。

可能,在很大程度上取决于你的工具链(支持与否),但IMO留下了非常糟糕的品味,YMMV。