Es ist nur zufällig möglich.
Wenn sich die Funktionen f() und g() beide in derselben Quelldatei befinden und keine anderen Funktionen in der Datei vorhanden sind und wenn g() den Funktionszeiger an f() niemals an einen der Aufrufer zurückgibt Dann macht f() static den Job.
Wenn andere Funktionen in derselben Quelldatei angezeigt werden müssen, platzieren Sie f() am unteren Ende der Datei als statische Funktion, und definieren Sie g() unmittelbar danach, um mehr oder weniger den gleichen Effekt zu erzielen Sie haben dem Compiler nicht gesagt, dass er Fehler bei "fehlenden Deklarationen" erzeugen soll, andere Funktionen könnten ihn mit Warnungen aufrufen.
#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();
}
Verständlich kann diese Technik nicht zuverlässig in derselben Datei ein anderes Paar von Funktionen erweitert werden - x() und y() -, so daß x() und nur x() kann y(), während g nennen() und nur g() kann f() gleichzeitig aufrufen.
Normalerweise würden Sie sich jedoch auf die Disziplin der Programmierer verlassen und einfach f() statisch in der Quelldatei zusammen mit einem Kommentar machen, den nur g() aufrufen darf, und dann jeden disziplinieren, der den Code so ändert Eine andere Funktion als g() ruft f() auf.
Sind Sie sicher, dass die Frage genau so war? Es ergibt keinen Sinn für mich. Wenn es vielleicht um Mitgliederfunktionen geht, könnte es vielleicht etwas Verdienst haben, aber gewöhnliche Funktionen? – Suma
@Suma: Es würde keine Mitgliedsfunktionen in C geben. –