Я не уверен, что понимаю, что вы подразумеваете под «быть скопированными дословно», но все C компиляторы (msv c, g cc, clang, et c ...) иметь директивы препроцессора, которые по существу позволяют добавлять фрагменты кода в исходные файлы для компиляции. Например, директива #include
извлечет содержимое указанного файла для включения в компиляцию. «Эффектом» этого является то, что вы можете делать странные вещи, такие как:
printf("My code: \n%s\n",
#include "/tmp/somefile.c"
);
В качестве альтернативы, создание макросов с помощью директивы #define
позволяет заменять фрагменты кода путем вызова имени макроса. Все это происходит на этапе препроцессора перед переходом в «выходные данные компиляции».
Другие языки, такие как c# с roslyn, позволяют компилировать код во время выполнения. Конечно, вы также можете реализовать то же самое в c, вызвав ваш компилятор, например, через system()
, а затем загрузив полученную библиотеку с помощью dlopen
.
Редактировать: Теперь что я возвращаюсь и думаю об этом вопросе, я должен также отметить, что python является одним из тех C -целевых «компиляторов» (я думаю, технически интерпретатор поверх python среды выполнения). Python давайте использовать собственный скомпилированный код C с некоторыми кодами py API для экспорта функций или напрямую с некоторыми помощниками типа dlopen. Взгляните на inline c module , который делает то, что я описал выше (вызовите компилятор, а затем загрузите скомпилированный код). Я полагаю, у вас должна быть возможность выполнять аналогичные функции с любым языком, который может вызывать c скомпилированный код (c#, java, et c ...).