c中,一個文件裡局部變量可以和全局變量重名。那這個文件編譯出來的.o中,這兩個變量的符號是怎麼表示的呢?不可能符號是相同的呀!c++處理這種情況時,符號表示和c一樣還是不同呢?
建議看《linux平台上學C語言》這本書,底層講得挺詳細的。
在同一個.o文件裡不存在鏈接性的問題,怎麼名應該就無所謂了。對於全局變量跟局部變量,我覺得放的位置都差那麼多,隨便加個前綴就區分開了,還有局部變量可能一開始聲明的時候就被替換成地址了,編譯生成的符號表裡是沒有局部變量的(符號表是用來兩個或以上的.o文件重新鏈接定位時用的,因為局部變量根本不能被其他文件鏈接!)C++不同的編譯器所對於同樣的函數會生產不一樣的符號(這樣是為什麼能重載函數),所以不同C++編譯器出的.o文件是不能互相鏈接的,符號會出錯。這麼說不知道解了你心中的疑惑沒?那本書挺好的,解了我很多疑問,也告訴了我很多不知道的“秘密”。