寫程式弄清楚哪些是語言層次的事物是必要的

為什麼說C語言的const只是語言層次

很簡單,因為不管怎麼下

變數配置就是在RAM上面

RAM的硬體特性就是讓人隨便的讀寫

除非有辦法把他配置到ROM,這不是不可能

嵌入式系統極可能有這樣的配置

另外就是靠作業系統和Loader的幫忙囉

所以只要語言有漏洞就可以讓你破解

 

事實上可以靠pointer的轉型 (cast)

雖然程式照樣能編過

但是 compiler是會提出警告的

因為程式開發人員正嘗試著放鬆權限

若想讓不要發出警告

有一種type可以完全避開,叫作void*

能夠接受任何轉型,任何type也可以轉成此 type

範例

const int i = 2;

i = 3; // error

*(int*)&i = 3; // warning

*(int*)(void*)&i = 3; // nothing

但後果就自負啦

arrow
arrow
    文章標籤
    C constant pointer cast
    全站熱搜

    wylokgo101 發表在 痞客邦 留言(0) 人氣()