我正在使用第三方 C 文件,该文件具有以下段。
static void
random_vector(gsl_vector * v, gsl_rng * r)
{
size_t i;
for (i = 0; i < v->size; ++i)
{
double vi = __x0 * gsl_rng_uniform(r) - __x1; /* in [-1,1] */
gsl_vector_set(v, i, vi);
}
}
#include "test_impulse.c"
#include "test_gaussian.c"
#include "test_median.c"
#include "test_rmedian.c"
有没有办法,例如一个 gcc 选项,自动将原始 C 文件转换为包含“test_impulse.c”等的文件? 手动执行此操作很容易,但我将不得不处理很多此类情况。
[更新]因为C文件还包含一些头文件(.h文件),我不需要将其放入转换后的文件中。因此,按照下面的评论中的建议使用 gcc“-E”选项是不行的。
最佳答案
我的解决方案有一些警告,但一般来说,当所有行都以 #
作为第一个字符并以 c"
结尾并且没有行以 $< 开头时
你可以有一个看起来像这样的小管道:
sed -E 's/^#(.*[^c]")$/$\1/' ORIGINAL | \
gcc -E - | \
sed -E 's/^\$(.*)$/#\1/' > FINAL
它的作用是,它将所有以主题标签开头并以 c"
结尾的行上的主题标签替换为美元符号。然后执行 gcc -E
然后将所有美元符号恢复为主题标签。
关于c - 如何在C中自动内联包含的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57425729/