alternatywa dla __LINE__

0

Heja Bracia

Istnieje jakiś lepszy sposób niż makro LINE aby pobrać numer linni w pliku źródłowym?Bo LINE'a nie mogę zastosować do funkcji z powodów oczywistych:

void function(int line=__LINE__)//a mi chodzi o to,żeby wziął numer linni z wywołania funkcji nie jej deklaracji
0

Sieroto jedna, dla __LINE__ nie ma alternatyw, to makro preprocesora. Alternatywa jest dla wywołania funkcji, makro preprocesora je opakowujące:

void funkcja(int a, char *b, int line);
#define funkcja(a, b) funkcja(a, b, __LINE__)
0

Tyle to sam wiem,potemu się pytam o alternatywy.A opakowanie w makro z różnych względów średnio mi pasuje.

0

No to wykorzystaj symbole? Binarka z wkompilowanymi numerami linii + odpowiednie debug API, które to wyciągnie? NIE MA bezpośredniej alternatywy dla __LINE__. Z takimi pytaniami to do Newbie.

1

pogrzeb w dokumentacji używanego kompilatora, niektóre pozwalają na dostanie się do danych dla debugger i odszyfrowanie zawartości call stack.
IMHO opakowanie funkcji w macro jest najlepszym rozwiązaniem.

0

Już tak zrobiłem Marku.Kłopot był z tym,że makra nie mają domyślnej wartości parametrów :/(stąd kombinowałem,jakby tu innaczej to zrobić i dałem temat) i musiałem stworzyć 2 makra:

inline void test(const QString &text,const QString &loggerID="default",int line=0,const QString file=QString())
{
	qDebug()<<file<<line<<text;
}
#define LOGDEBUG_Logger(text,loggerId) test(text,loggerId,__LINE__,__FILE__);
#define LOGDEBUG(text) LOGDEBUG_Logger(text,"default")

1 użytkowników online, w tym zalogowanych: 0, gości: 1