2013-12-06 2 views
-2

Если __ FIL E__ и __ LINE __ являются параметрами рекурсивной функции, существует ли способ сохранить значения __ FILE __ и __ LINE __ одинаково во всех рекурсиях функции. Из моих собственных попыток вы не можете strcpy имя файла. Кроме того, после первой рекурсии __ FILE __ и __ LINE __ меняются на номер файла и строки, на котором появляется рекурсивная функция.Использование __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); 
    } 
} 

Я хочу, чтобы имя файла и строку, чтобы соответствовать вызову функции в основной и не вызов функции в рекурсия, но делать это так не представляется возможным. Я даже не думаю, что это возможно, но, может быть, я что-то упустил.

Я хотел бы дать понять, что это не тот код, который я использую, я просто сделал это на месте, чтобы подробно рассказать о моем вопросе, поэтому, если есть большие ошибки, я приношу свои извинения. Он не должен ничего делать, просто помогите объяснить мой вопрос.

+3

Это не переменные, узнать, что делает препроцессор, попробуйте код первым! –

+0

Если вы хотите, чтобы строка и имя файла '' main.cpp'' находились во всех вызовах, написанных как только вы считаете, что вы не видите, что я вижу, это 'const' для' char * '. Если вы хотите, чтобы * first * one был из 'main.cpp' и после того, как был из файла' test() 'is in, рекурсивный вызов должен также использовать' __FILE__' и '__LINE__'. (Т.е. don 'переслать параметры 'filename' и' line'). И остановите файлы '# include'-ing .c/.cpp. его плохая привычка. – WhozCraig

+0

Поскольку '__LINE__' и' __FILE__' разрешены только один раз, во время предварительной обработки они будут только * появляться * один раз в вашей «рекурсивной» функции. В вашей формулировке вы полагаете, что они появятся многократно, «столько раз, сколько« рекурсивный »называется». – usr2564301

ответ

1

Это не работает, потому что __FILE__ и __LINE__ подставляются в recurse. Вы должны непосредственно вызывать test из main вместо:

test(2, __FILE__, __LINE__); 
Смежные вопросы