-2
a1.cpp是否可以從另一個翻譯單元訪問靜態變量?
static int a = 20;
a2.cpp
#include <iostream>
extern int a;
int main() {
std::cout<<a<<std::endl; // link error
}
如果您不能修改a1.cpp,是有可能改變a2.cpp,以便它可以在a1.cpp參觀a
?也許使用程序集?
-------編輯---------
萬一有人有興趣,我終於找到了一種方法來做到這一點:
a1.cpp
static int a = 20;
a2.cpp
int b = 100;
int main() {
int* p = &b;
p--;
*p = 42; // now a in a1.cpp is changed from 20 to 42, tested by clang++ 3.8.1
return 0;
}
我知道這是不是爲static
的原因,只是好奇,如果我們可以用地址和偏移破解它。
你的意思是靜態'限定變量或變量_static_存儲持續時間一般?並且不要垃圾郵件標籤。 – Olaf
如果您有指向它的指針,則可以從另一個翻譯單元修改靜態對象。 – EOF
用'static'標記的全局變量具有*內部鏈接*,這意味着它們不會從翻譯單元導出。如果需要從另一個翻譯單元訪問該變量,則該變量需要具有* external linkage *(這是非靜態全局變量的默認值)。 –