在递归函数中使用__FILE__和__LINE__

时间:2013-12-06 23:13:12

标签: c recursion macros

如果__ FIL E__和__ LINE __是递归函数的参数,是否有任何方法可以在函数的所有递归中保持__ FILE __和__ LINE __的值相同。根据我自己的尝试,你不能strcpy文件名。此外,在第一次递归之后,__ FILE __和__ LINE __更改为递归函数出现的文件和行号。

例如,在main.c

#include <stdio.h>
#include <stdlib.h>
#include "recurse.c"

int main(int argc, char* argv[]){
    recurse(2);
    return 0;
}

在recurse.c中

#define recurse( x ) test( x,__FILE__,__LINE__ )

void test(int num, char* filename, int line){
    if(num > 0)
        test(num - 1, filename, line);
    }
}

我希望文件名和行与main中的函数调用相对应,而不是递归中的函数调用,但这样做是不可能的。我甚至认为这不可能,但也许我错过了一些东西。

我想说清楚这不是我正在使用的代码,我只是在现场详细说明我的问题所以如果有任何重大错误我道歉。它不应该做任何事情,只是帮助解释我的问题。

1 个答案:

答案 0 :(得分:1)

这不起作用,因为__FILE____LINE__recurse本身中被替换。您应该直接从test致电main

test(2, __FILE__, __LINE__);