Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Język C. Wypisanie nazwy funkcji

Ostatnio zmodyfikowano 2017-10-11 13:15
Autor Wiadomość
aksen
Temat założony przez niniejszego użytkownika
Język C. Wypisanie nazwy funkcji
» 2017-10-10 19:36:18
Witam

Czy jest możliwe umieszczenie w funkcji w języku C linii kodu, która wypisze nazwę tej funkcji?

np.


int jakasFunkcja()
{
  //u wykrycie i wypisanie nazwy funkcji "jakasFunkcja"

  return 0;
}
P-165617
mateczek
» 2017-10-10 19:59:50
w pliku wykonywalnym pewnikiem nawet nie ma nazw funkcji. Nazwy mogą być tylko w źródle jako ułatwienie dla programisty . Co nie zmienia faktu że funkcja może się przedstawić jakimś powitaniem hello world
P-165623
jankowalski25
» 2017-10-10 20:39:01
Możliwe, że za pomocą preprocesora dałoby się coś takiego zrobić. A jaki jest cel? Czy te funkcje (jeśli jest ich kilka) mają robić coś jeszcze oprócz wypisywania nazwy?

Przykład

C/C++
#include <stdio.h>

#define MY_FUNC(funkcja) void funkcja(void) \
 { \
     puts(#funkcja); \
 }

MY_FUNC( raz )
MY_FUNC( dwa )
MY_FUNC( trzy )

int main( void )
{
    raz();
    dwa();
    trzy();
    return 0;
}
Standardowe wyjście programu:
raz
dwa
trzy
P-165625
killjoy
» 2017-10-10 21:10:43
Coś takiego mi działało pod gcc i visualem:
C/C++
#include <stdio.h>


void f()
{
    puts( __FUNCTION__ );
   
}

void g()
{
    puts( __FUNCTION__ );
   
}

void h()
{
    puts( __FUNCTION__ );
   
}
int main()
{
    f();
    g();
    h();
}

Standardowe wyjście:

f
g
h
P-165630
aksen
Temat założony przez niniejszego użytkownika
» 2017-10-11 00:42:47
>mają robić coś jeszcze oprócz wypisywania nazwy?

chyba nie

Robię to w celu poznania działania programu średniej wielkości (na Linuksa).
Program otrzymuje polecenia przez sieć z zewnętrznego urządzenia
i coś tam sobie w pewnych strukturach modyfikuje.

Jak wypisze nazwy wywoływanych funkcji na ekran
będzie mi łatwiej analizować działanie programu.

Może macie jakieś dodatkowe sugestie?
P-165637
mateczek
» 2017-10-11 06:19:50
pytanie zasadnicze czy masz kod źródłowy czy tylko biharkę ?? Jeśli źródła to debugger i praca krokowa i se możesz analizować program do woli !!
P-165639
Elaine
» 2017-10-11 09:25:28
Standard definiuje __func__ właśnie do tego celu:
C/C++
void foo( void )
{
    puts( __func__ );
}
P-165640
aksen
Temat założony przez niniejszego użytkownika
» 2017-10-11 13:15:12
Przetestowałem coś takiego i ładnie wypisuje przydatne informacje:

C/C++
printf( "file: %s, func: %s, line: %d\n", __FILE__, __FUNCTION__, __LINE__ );

Samego debugera też spróbuję. Dzięki za pomoc.
P-165644
« 1 »
  Strona 1 z 1