我有一个理论问题。外部静态函数声明是否打破内部链接?
下面是一个例子:
file1.c中
static void foo()
{
...
}
file2.c中
extern void foo();
main()
{
foo();
}
编译就可以了。
那么,extern打破了静态声明的内部联系?
我有一个理论问题。外部静态函数声明是否打破内部链接?
下面是一个例子:
file1.c中
static void foo()
{
...
}
file2.c中
extern void foo();
main()
{
foo();
}
编译就可以了。
那么,extern打破了静态声明的内部联系?
理论上只是“编译好”,还是你真的测试过这个?
一个static
功能不应该从编译单元外部可见的(C文件,通常情况下),它在。
在不同的编译单元声明同名的函数extern
应该不会改变这一点。
确保你真正建立和链接测试程序得当,否则所有你要测试的是,你可以有一个“悬”引用外部符号(在foo
功能从2.C参考) 。将2.c编译为可执行文件(即链接它)应该失败。
编译应该没问题。如果你也可以链接,你的编译器有问题。
快速测试证实预期接头失败(VC++ 2010所明示):引用解析外部符号 “空隙__cdecl FOO(无效)”(FOO @@ YAXXZ):
1> test.obj:错误LNK2019在功能_wmain
什么是令人惊讶的你?编译器一次只能在一个编译单元上运行。链接器可能会抱怨。 – 2012-01-18 12:38:19
另外,你的'主'是不正确的。它可以接受任意数量的参数。 – 2012-01-18 12:38:25
你也试过链接程序吗? – nos 2012-01-18 12:39:32