Frage von Ucanaskme, 11

Wie kann ich den Namen (nicht den Path) einer aktuell laufenden Datei herausfinden, und das möglichst schlank bzw. kurz gelöst?

Ich habe mir eine eigene Bibliothek erstellt und will ihr nun eine Funktion hinzufügen, die beim Aufruf den Namen des aktuell laufenden Programms (z.B. eeffgghh.c) ausgibt. Vielen Dank für ein Beispiel, Google könnte mir nicht so viel helfen!

Noch eine Frage: Wie kann ich eine bestimmte Zeile angeben, sodass die Zeilennummern ausgegeben wird(z.B.: "Zeile: 13"). Das am Besten auch noch als Funktion, so ähnlich also, wie eine Error Ausgabe die bei mir folgend aussieht:

"eeffgghh.c(Zeile 32, 15) : error : prrimtf : No function found "

Nach dem Muster "eeffgghh.c(Zeile ..., ...)" will ich gerne eine Funktion in meine Bib hinzufügen.

Vielleicht ist das ganz einfach und ich habe einfach gerade ein Brett vor dem Kopf, trotzdem danke!

Antwort
von ralphdieter, 7

Den Namen des aktuellen Programms bekommst Du über argv[0] in

int main( int argc, char *argv[] )

Das ist natürlich eine ausführbare Datei (und nicht "irgendwas.c"). Manche Compiler bieten als Erweiterung globale Variablen gleichen Inhalts an (__argv__).

Die Standard-Makros __FILE__ und __LINE__ werden vom Präprozessor durch die aktuellen Werte in der laufenden Übersetzungseinheit ersetzt. Ob der Dateiname dabei einen Pfad enthält, kommt darauf an, wie der Compiler aufgerufen wurde.

Mit etwas Tricksen kannst Du diese Werte automatisch übergeben lassen:

bib.h:

#define test(x) test_fl(x, __FILE__, __LINE__)
void test_fl ( int x, char const *file, int const line );

bib.c:

void test_fl ( int x, char const *file, int const line )
{
 if (x<0) printf( "%s(%d): negative value in test(%d)\n", file, line, x );
}

Dann würde der Aufruf test(-123) in main.c etwa zu dieser Ausgabe führen:

main.c(42): negative value in test(-123)

Kommentar von Ucanaskme ,

Danke! 

Keine passende Antwort gefunden?

Fragen Sie die Community