面向C的编译器是否允许内联C?

问题描述 投票:2回答:1

某些C编译器发出汇编语言,并允许将汇编摘要放在源代码中以内联方式逐字复制到输出中,例如https://gcc.gnu.org/onlinedocs/gcc/Using-Assembly-Language-with-C.html

一些用于高级语言的编译器发出C,从为此在某种程度上设计为Nim的C,到绝对不是的Scheme,并付出了极大的努力来以这种方式编译为有效的代码。

是否有任何类似的编译器,类似地允许C的代码片段直接内插在源代码中,逐字复制到输出中?

c syntax programming-languages
1个回答
0
投票

我不确定我理解“逐字复制到输出”的意思,但是所有C编译器(msvc,gcc,clang等)都具有预处理器指令,该指令实际上允许添加代码段到源文件进行编译。例如,#include指令将拉入要包含在编译中的指定文件的内容。这样的“效果”是您可以做一些奇怪的事情,例如:

printf("My code: \n%s\n",
#include "/tmp/somefile.c"
);

或者,使用#define指令创建宏,则可以通过调用宏名称来代替代码段。这一切都发生在预处理器阶段,然后变成编译“输出”。

[其他语言,例如带有roslyn的c#,允许在运行时编译代码。当然,您也可以在c中通过调用编译器(例如通过system()之类,然后使用dlopen加载结果库)来实现相同的功能。

编辑:

现在,我回过头来思考这个问题,我还应该注意到python是那些以C语言为目标的“编译器”之一(从技术上来说,我猜想是python运行时之上的解释器)。 Python让您将本机C编译代码与一些py API代码一起使用来导出函数,或直接与dlopen一样的帮助程序一起使用。看看执行我上面描述的操作的inlinec module(调用编译器,然后加载已编译的代码)。我想您应该能够使用任何可以调用c编译代码的语言(c#,java等)执行类似的功能。
© www.soinside.com 2019 - 2024. All rights reserved.