是否存在可以将语句作为参数接受的函数等效函数?

时间:2018-05-08 10:07:05

标签: c code-duplication

我有以下代码部分,我需要在整个程序中使用大约5次,但使用不同的代码行代替注释。

while (loop_day < (day+1)) {
    while (loop_size < (size+1)) {

        //new lines here

        size = size + 1;
    }
    loop_day = loop_day + 1;
}

我可以复制并粘贴多次,但出于审美原因,我真的宁愿不这样做。我试图搜索“可以将语句作为参数的函数”,但没有找到合适的。

编辑:我想在代码中“嵌入”各种语句。

一个例子:

while (loop_day < (day+1)) {
    while (loop_size < (size+1)) {

        // code that stores various values into an array

        size = size + 1;
    }
    loop_day = loop_day + 1;
}


while (loop_day < (day+1)) {
    while (loop_size < (size+1)) {

        // code that reads values stored in that array

        size = size + 1;
    }
    loop_day = loop_day + 1;
}

但是我想要喜欢这个:

custom_loop {
// code that stores various values into an array
}

custom_loop {
// code that reads values stored in that array
}

2 个答案:

答案 0 :(得分:4)

您可以考虑回调函数。例如,

typedef void (*t_func)(int, int);

void doLoopOverDaysAndSize(t_func callback)
{
    while (loop_day < (day+1)) {
        while (loop_size < (size+1)) {
            callback(loop_day, loop_size)
            size = size + 1;
        }
        loop_day = loop_day + 1;
    }
 }

然后你可以传递一些这样的功能

void myDaySizeHandler(int day, int size)
{
    // do something
}

答案 1 :(得分:-1)

人们往往会忘记包含可以在代码中的任何位置使用,而不仅仅对标题(Including one C source file in another?)有用。然而,有些人不赞成他们。

示例:

common.inc:

x = x + 1;

的main.c

int main()
{
    {
        int x = 3;
#include "common.inc"
        printf("x = %d\n", x);
    }
    {
        double x = 1.234;
#include "common.inc"
        printf("x = %f\n", x);
    }
    return 0;
}

CNC中 对于您的代码,这将导致:

commonStart.inc

while (loop_day < (day+1))
{
    while (loop_size < (size+1))
    {

commonEnd.inc

        size = size + 1;
    }
    loop_day = loop_day + 1;
}

的main.c

#include "commonStart.inc"
//new lines here
#include "commonEnd.inc"