Chcę przesłonić niektóre wywołania funkcji do różnych interfejsów API w celu rejestrowania wywołań, ale także może zajść potrzeba manipulowania danymi przed wysłaniem ich do rzeczywistej funkcji.Zastępowanie wywołania funkcji w C
Załóżmy na przykład, że używam funkcji o nazwie getObjectName
tysiące razy w moim kodzie źródłowym. Chcę tymczasowo zastąpić tę funkcję czasami, ponieważ chcę zmienić zachowanie tej funkcji, aby zobaczyć inny wynik.
utworzyć nowy plik źródłowy takiego:
#include <apiheader.h>
const char *getObjectName (object *anObject)
{
if (anObject == NULL)
return "(null)";
else
return "name should be here";
}
skompilować wszystkie moje inne źródła jak normalnie, ale połączyć go przed tym zanim powiązanie funkcji z biblioteki API. Działa to dobrze, z wyjątkiem tego, że nie mogę oczywiście nazwać prawdziwej funkcji w mojej funkcji nadrzędnej.
Czy istnieje łatwiejszy sposób na "przesłonięcie" funkcji bez łączenia/kompilowania błędów/ostrzeżeń? Idealnie chciałbym móc zastąpić funkcję, kompilując i łącząc dodatkowy plik lub dwa, zamiast bawić się z opcjami łączenia lub zmieniając rzeczywisty kod źródłowy mojego programu.
@Dreamlax, teraz przechodzimy od ogólnych (C) do konkretnych rozwiązań (gcc/linux) - dobrze byłoby wyjaśnić, na czym polega, aby lepiej ukierunkować odpowiedzi . – paxdiablo
Cóż, rozwijam się na Linuksie, ale celami są Mac OS, Linux i Windows. W rzeczywistości jednym z powodów, dla których chcę zastąpić funkcje, jest podejrzenie, że zachowują się one inaczej w różnych systemach operacyjnych. – dreamlax