Repititives任务和for循环

时间:2016-10-14 09:35:54

标签: c

我要检查200个表中的一个字节。 我不想写200行来检查它。 你有任何关于for循环的提示吗?

我的代码示例:

#include <stdio.h>
#include "CUnit/Basic.h"
#include "CUnit/Console.h"
#include "CUnit/Automated.h"
#include "CUnit/CUCurses.h"  
#include "CUnit/TestDB.h"

void _testu(){
  CU_ASSERT_EQUAL(55, my_tab_0[5]);
  CU_ASSERT_EQUAL(55, my_tab_1[5]);
  CU_ASSERT_EQUAL(55, my_tab_2[5]);
  CU_ASSERT_EQUAL(55, my_tab_3[5]);
   .
   .
   .
  CU_ASSERT_EQUAL(55, my_tab_n[5]);
}

2 个答案:

答案 0 :(得分:3)

如果你有n个独立数组,你可以尝试构建一个指针数组:

char *my_tab[] = { my_tab_0, my_tab_1, m__tab_2, ... my_tab_n };

你可以这样做:

void _testu(){
    int i;
    for(i=0; i<=n; i++) {
        CU_ASSERT_EQUAL(55, my_tab[i][5]);
    }
}

如果你有多个循环使用它,它主要是有意义的。

答案 1 :(得分:1)

由于无法更改数据结构,请考虑使用高级文本编辑器工具为您编写这些行。它不是处理它的最正统的方式,但它起作用,它至少是快速和清晰的。在emacs中,我会考虑两个选项:

1:编写一个为您生成格式化字符串的循环:

(defun copy_iter (strng times)
  (let ((result))
    (dotimes (i times result) 
      (setq result (concat result "\n" (format strng i))))))

调用(copy_iter "CU_ASSERT_EQUAL(55, my_tab_%s[5]);" 200)将返回您的期望

2:复制一般字符串200次,然后使用正则表达式替换标记:

1)使用通用标记复制字符串200次(here是如何):

"
CU_ASSERT_EQUAL(55, my_tab_<CHANGE_THIS>[5]);
CU_ASSERT_EQUAL(55, my_tab_<CHANGE_THIS>[5]);
CU_ASSERT_EQUAL(55, my_tab_<CHANGE_THIS>[5]);
CU_ASSERT_EQUAL(55, my_tab_<CHANGE_THIS>[5]);
CU_ASSERT_EQUAL(55, my_tab_<CHANGE_THIS>[5]);
...

2)调用replace-regexp,输入:<CHANGE_THIS>,输出:\#也会留下预期的字符串,如here所述。

当然,emacs只是一个建议。我的答案的要点是表明文本编辑器本身有时(或者说很多次)可以帮助我们克服这些问题。我希望它有所帮助!

干杯