Jest to możliwe tylko przypadkowo.
Jeśli funkcje f() i g() znajdują się w tym samym pliku źródłowym i nie ma żadnych innych funkcji w pliku, a jeśli g() nigdy nie zwraca wskaźnika funkcji do f() do żadnego z jego wywołań , a następnie wykonanie f() static wykona zadanie.
Jeśli inne funkcje muszą pojawić się w tym samym pliku źródłowym, umieszczając f() na dole pliku jako funkcję statyczną i definiując tylko g() natychmiast po uzyskaniu mniej więcej takiego samego efektu - chociaż jeśli nie powiedzieliście kompilatorowi, aby generował błędy w "brakujących deklaracjach", inne funkcje mogłyby wywoływać je z ostrzeżeniami.
#include <stdio.h>
extern void g(void); /* in a header */
/* Other functions that may not call f() go here */
static void f(void)
{
puts("X");
}
void g(void)
{
f();
}
Oczywiście, ta technika nie może być rozszerzony niezawodnie inną parę funkcji w tym samym pliku - X() i y() - takie, że x() i tylko x() może wywołać Y() po g() i tylko g() może wywołać f() w tym samym czasie.
Zwykle jednak polegasz na dyscyplinie programistów i po prostu ustaw f() w pliku źródłowym wraz z komentarzem, który może wywołać tylko g(), a następnie zdyscyplinować każdego, kto modyfikuje kod tak, aby funkcja inna niż g() wywołuje f().
Czy na pewno pytanie było dokładnie takie jak to? To nie ma dla mnie żadnego sensu. Być może, gdyby dotyczyło to funkcji członka, to może miałoby to jakieś zalety, ale zwykłe funkcje? – Suma
@Suma: Nie będzie funkcji członka w C. –