alternatywa dla __LINE__

Odpowiedz Nowy wątek
2011-07-26 18:56
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

"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]

Pozostało 580 znaków

2011-07-26 19:02
cpp programmer
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__)

Pozostało 580 znaków

2011-07-26 19:07
0

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


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]

Pozostało 580 znaków

2011-07-26 19:14
cpp programmer
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.

makro LINE do działu newbie? znalazł się wielki programista. - MarekR22 2011-07-26 22:17
Hhmm, ale wypadałoby wiedzieć jak działają makra i czemu nie tak jak autor by chciał. - msm 2011-07-26 22:52
Tfu, wycofuję się, autor WIE o co chodzi i wyraźnie to zaznaczył... - msm 2011-07-26 22:53
Pośpieszyłem się z komentarzem po prostu, nvm... - msm 2011-07-26 22:59
Spoks Bracie,nic się wszak nie stało ;) - MasterBLB 2011-07-26 23:00

Pozostało 580 znaków

2011-07-26 22:21

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.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

2011-07-26 22:39
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")

"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 2x, ostatnio: MasterBLB, 2011-07-26 22:43
Jak robisz w Qt to poparz jak jest zrobione makro Q_ASSERT. - MarekR22 2011-07-26 23:04
Dzięki,interesująca sztuczka.Niestety,do QStringa nie za bardzo daje się zastosować :/ Poza tym VS daje mi 'syntaxt error: )' dla makra #define LOGDEBUG_Logger(text,loggerId) ((!(loggerId))) ? test(text,loggerId,LINE,FILE) : test(text,"default",LINE,FILE); - MasterBLB 2011-07-26 23:13

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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