声明为static的函数和变量具有内部链接,它们具有文件范围,并且对于其他文件中的函数不可见.
假设我声明了这样的函数: -
static int foo(int i);
Run Code Online (Sandbox Code Playgroud)
在一个名为file1.c的文件中我可以通过使用指针从其他文件file2.c访问此函数.
我正在阅读一本书,其中写道它可以完成,但我不知道这是怎么可能的.
这些是确切的行: -
因为它具有内部链接,所以不能直接从定义它的文件外部调用foo.(将foo声明为静态并不能完全阻止它在另一个文件中被调用;通过函数指针的间接调用仍然是可能).
小智 6
也许您正在寻找这个?
// file1.h
extern void (*fptr)(void);
// file1.c
static void foo(void)
{
printf("Hello world!\n");
}
void (*fptr)(void) = &foo; //or void (*fptr)(void) = foo;
// file2.c
#include "file1.h"
fptr();
Run Code Online (Sandbox Code Playgroud)
这里,foo是静态的,但它的地址是通过非static全局变量引用的。这是完全有可能的。