2013-09-30 168 views
2

有人可以解釋你將如何從其他C/C++文件訪問靜態變量?如何從其他C/C++文件訪問靜態變量?

+7

靜態變量具有文件(或更短)範圍,因此不打算從其他文件訪問。你可以編輯你的問題,包括代碼,演示你在這裏做什麼? – simonc

+0

可能的重複[什麼是「靜態」在C程序中的意思?](http://stackoverflow.com/questions/572547/what-does-static-mean-in-a-c-program) –

+0

@CamilleG。沒有它不是重複的。 – Megharaj

回答

-2

您可以創建一個.h文件並在其中創建靜態變量。然後,您必須將該.h文件包含到您要使用它的所有其他文件中。請記住,靜態行爲將無法實現!

+0

http://stackoverflow.com/questions/3698043/static-variables-in-c –

+0

上一條評論被刪除。你會非常正確地認爲這會建立。它不會像OP期望的那樣工作,因爲他將有多個不共享狀態的文件局部變量。如果這就是你答案最後一句的意思,那麼它可以變得更清晰。 – simonc

+0

如果我們將靜態變量的地址傳遞給其他文件中的函數,@simonc會起作用。好奇心 – Megharaj

2

static在不同的情況下意味着不同的事物,所以我不確定你的意思。但假設你的意思是標記爲static的頂級作用域變量,答案是沒有可靠的方法直接從其他文件訪問它 - 事實上它就是你如何確定的。

如果要授予對來自其他文件的靜態變量的受限訪問權限,請提供一個函數或一組函數,其中包含在.h文件中聲明的簽名以及與讀取或操作變量的靜態變量相同的文件中的定義期望。

如果要授予不受限制訪問靜態變量,那麼,呃,只是刪除了static關鍵字,因爲你想要的是什麼static方式相反。

1

一種方法是,將靜態變量的地址傳遞給另一個文件中的函數。這是可能的方法之一。

0

static聲明一個標識符(對象的名稱)限制了它的範圍,並給它內部或沒有鏈接。因爲該名稱沒有外部鏈接,所以其他源文件中的相同標識符(單獨編譯)無法鏈接到名稱。

這意味着其他源文件不能使用該標識符來訪問該對象。訪問不帶名稱的對象的唯一方法是通過地址。因此,其他源文件只有在以某種方式(例如在函數參數或數據結構中)給出其地址時纔可以直接訪問標識爲static的標識符。

其他源文件可能通過讀寫對象值的輔助函數或提供與對象相關的其他服務的間接訪問對象。