我有一個理論問題。外部靜態函數聲明是否打破內部鏈接?
下面是一個例子:
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