Возможно только по совпадению.
Если функции f() и g() находятся в одном исходном файле, и в файле нет других функций, и если g() никогда не возвращает указатель на функцию f() никому из своих вызывающих абонентов , тогда выполнение f() static выполнит задание.
Если другие функции должны отображаться в том же исходном файле, помещая f() в нижней части файла как статическую функцию и определяя только g() сразу после достижения такого же эффекта, хотя если вы не сказали компилятору генерировать ошибки в «отсутствующих декларациях», другие функции могли бы вызвать его с предупреждениями.
#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();
}
Очевидно, что этот метод не может быть надежно распространен на другие пары функций в том же файл - х() и у() - такие, что х(), и только х() можно назвать у() во время г(), и только g() может одновременно вызвать функцию f().
Однако, как правило, вы должны полагаться на дисциплину программистов и просто ставить файл f() в исходном файле вместе с комментарием, который может вызвать только g(), а затем дисциплинировать любого, кто изменяет код, чтобы функция, отличная от g(), вызывает f().
Вы уверены, что вопрос был именно таким? Для меня это не имеет никакого смысла. Возможно, если бы речь шла о функциях-членах, то, возможно, это могло бы иметь некоторые достоинства, но обычные функции? – Suma
@Suma: В C. не было бы функций-членов. –