是否可以使用预处理器对数组进行排序?

psi*_*lia 6 c sorting gcc c-preprocessor

我有很多非常长的数组.没有运行时排序是可能的.手动排序也很耗时.此外,可以在以后以任何顺序添加新元素,因此我想使用C预处理器按值对它们进行排序,或者可能有任何编译器标志(GCC)?

例如:

sometype S[] = {
  {somevals, "BOB", someothervals},
  {somevals, "ALICE", someothervals},
  {somevals, "TIM", someothervals},
}
Run Code Online (Sandbox Code Playgroud)

必须这样排序:

sometype S[] = {
   {somevals, "ALICE", someothervals},
   {somevals, "BOB", someothervals},
   {somevals, "TIM", someothervals},
}
Run Code Online (Sandbox Code Playgroud)


解决了

好的,这是我的解决方案:

  1. 手动将每个数组复制并粘贴到名为tobesorted.c的临时文件中
  2. 按第二列排序: sort -b -i --key=2 tobesorted.c
  3. 将输出复制并粘贴回原始文件.

实际上,有一种可能性直接从预处理器调用"排序"会很好(我希望至少GCC能以某种方式支持这些功能,但似乎它没有).

S.L*_*ott 11

做这个.

  1. 把你的巨型阵列放在一个文件中.

  2. 使用内置文件对文件进行排序 sort

  3. 编写一个小程序来从文件中创建C代码.编写C程序的AC程序很好.您可以使用Python及其中一些很酷的模板包来简化这项工作.

  4. 编译剩余的程序,该程序由转换为C代码的分类文件和程序的其余部分组成.

  • 并修改您的Makefile以自动完成所有这些操作. (4认同)

Vir*_*gil 5

不,这是不可能的.您不能使用预处理器执行字符串操作(连接除外).而且你也无法将字符串与模板元编程进行比较.

[edit]你可以做的是将你的数据结构放在一个文件中,该文件要由外部构建脚本(例如unix"sort"实用程序)进行预处理,然后修改你的makefile /项目,这样你就可以在构建时生成带有(已排序)初始化数组的C文件