c - 如何在C中自动内联包含的文件?

标签 c

我正在使用第三方 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/

相关文章:

python - zmq.Context() 在启动几分钟后挂起

c++ - EnumProcesses() 与 CreateToolhelp32Snapshot()

c - 带有多个定界符的 strtok

c - 如何知道输入的是否是数字?

c - 功能类似于 SYSTEM(const char *) 且不采用 const char 但采用动态生成的查询的函数是什么

c++ - 如何使用 DP 用 n 种不同的颜色绘制 r x r 字段,而不在同一行使用相同的颜色

ios - stringWithCString :encoding: returned nil, 当输入的cstring包含emoji时

将 sys/socket.h 中的 socklen_t int 更改为 uint32_t

c - C 中使用指针的函数无法返回正确的值

Program.exe 中的 c++ : Unhandled exception at 0x57B4B2CE (msvcr120d. dll):0xC0000005:读取位置 0xCDCCDC8 访问冲突