"Accessed"? Это зависит от того, что вы подразумеваете под этим термином. Я предполагаю, что когда вы говорите «статическая функция», вы имеете в виду автономную функцию, объявленную static
(то есть объявленную с внутренней связью), в отличие от статических функций-членов класса в C ++, поскольку последние очевидны и легко доступны из любого места.
Теперь объявленная автономная функция static
имеет внутреннюю связь. Он не может быть связан с из любой другой единицы перевода. Или, говоря иначе, к ней нельзя обращаться по имени из любой другой единицы перевода. Если это то, что вы имели в виду под «доступом извне области действия файла», то нет, это невозможно сделать.
Однако, если другие блоки перевода каким-то образом получают указатель на эту функцию (т. Е. Если вы каким-то образом позволяете этому указателю «просочиться» в чужой мир), тогда любой может по-прежнему вызывать эту функцию, сделав косвенный вызов и, таким образом, доступ "это. Например, если вы объявите
static void foo_static(void) {
}
extern void (*foo_ptr)(void) = foo_static;
тогда в любом другом переводе пользователь сможет сделать
extern void (*foo_ptr)(void);
foo_ptr();
и вызов перейдет к вашей функции foo_static
. Я не знаю, квалифицируется ли такой доступ как «доступ» в вашем вопросе.