昂首闊步
從bc編譯器走向vc編譯器
當我們的專案通過編譯器時
,我們總覺得是這麼神奇.當我們的專案在乙個編譯器中執行
而在另乙個編譯器中被否定時
,我們總是這麼困惑.面對幕布罩蓋的編譯器中的規律、我們更感到神秘.這裡、我用乙個簡單的方法來掀開這神密幕布的一角.同時、也為乙個程式從bc5編譯器昂首闊步走向vc編譯器尋找規律,架起橋梁.
我所使用的機型:
32位作業系統:window xp
整合環境: visual c++ 6.0 visual c++.net
工作狀況:不在網上
下面我引用清華大學出版社出版的c++程式設計教程第八章、指標中的第三個程式,開始**怎樣從乙個編譯器走向另乙個編譯器,並就其中一種轉換模式進行論證,並對它們的執行結果進行比較分析。
原程式:
#include
void main()
本程式能在bc5(32位機器環境)中執行,而在vc(32位機器環境)中不能編譯,因為它在vc中編譯遇到的問題是:
error c2440:"initializing:"cannot convert from 'float *' to 'int *'
error c2440:'=':cannot convert from 'float *' to 'int *'
warning c4244:'=':conversion from 'float'to'int',possible less of data
在此我決定對記憶體位址型別和指標型別進行轉換,以達到該程式在vc中執行的目的。
記憶體位址型別就是第乙個指向本記憶體位址的指標型別,而且這個指向本記憶體位址的指標型別還要和本記憶體位址所儲存的變數的型別相吻合。
高 double
ß-- float
long
unsigned
低 int
ß-- char,short
(由低向高轉換)
下面我把原程式的記憶體位址型別由float *轉換為int *
轉換後程式:
#include
void main()
下面我將修改後程式的執行結果與原程式結果對比:
原程式在bc++中執行的結果:
34.5
iptr:0x0067:fdfc=>1107951616
fptr:0x0067:fdfc=>34.5
4.76441e-44
344.76441e-44
修改後程式在vc++中執行的結果:
34.5
iptr:0x0012:ff7c=>1107951616
fptr:0x0012:ff7c=>34.5
4.76441e-044
344.76441e-044
通過以上兩種結果的對比,它們的位址是由於作業系統分配的記憶體位址不同而引起的不同,其他是沒有不同的.
下面將vc++.net上執行的結果與vc++6.0的執行結果進行對比:
修改後程式在vc++.net中執行的結果:
34.5
iptr:0x0012:ff7c=>1107951616
fptr:0x0012:ff7c=>34.5
4.76441e-044
344.76441e-044
通過這種對比,已證明上面我提出的記憶體位址的不同是作業系統造成的觀點是正確的.
有人問:是否其他語言的專案都能從其規律中總結一些模式呢?我想,既然我們已開始這樣想了,也開始這樣做了,那麼我們還會僅僅只是在幻想麼!
注:將vc的程式再返回bc5編譯器中執行,朋友們將會明白什麼呢?得到什麼呢?!
演示結束了
,腳下的路才開始.
朋友們,燃燒起我們生命的火把前進
!這是祖國賦予我們的責任.
電子郵箱
2023年5月10日
VC編譯器設定
工欲善其事,必先利其器 要想用 vc開發出高效率程式,必須對 vc編譯器有充分的了解。如果我們已經習慣編譯器給我的預設設定,那麼現在起開始嘗試改變吧 本篇文章 或者後續文章 講解 vc編譯器設定選項並沒有先後順序,只是作者在具體開發過程碰見了不同的編譯設定,進行深入了解,做此文章記錄。也希望讀到這篇...
VC編譯器設定
工欲善其事,必先利其器 要想用 vc開發出高效率程式,必須對 vc編譯器有充分的了解。如果我們已經習慣編譯器給我的預設設定,那麼現在起開始嘗試改變吧 本篇文章 或者後續文章 講解 vc編譯器設定選項並沒有先後順序,只是作者在具體開發過程碰見了不同的編譯設定,進行深入了解,做此文章記錄。也希望讀到這篇...
VC編譯器選項
cl.exe 是控制 microsoft c 和 c 編譯器與鏈結器的 32 位工具。編譯器產生通用物件檔案格式 coff 物件 obj 檔案。鏈結器產生可執行檔案 exe 或動態鏈結庫檔案 dll 注意,所有編譯器選項都區分大小寫。若要編譯但不鏈結,請使用 c。使用 nmake 生成輸出檔案。使用...