1. C語言中函數的地址在編譯時就分配好了,為什麼不會產生地址沖突運行時剛好那個地址有別的程序在用
函數的具體武理地址不是編譯的時候分配的,是運行的時候由系統分配的!如果你看一下生成的匯編代碼你就會發現進入函數時的操作是將返回地址壓棧後通過CALL跳轉到函數開頭處執行,壓棧的函數地址都是偏移量,實際地址在運行時通過基址加減偏移量得出。另外通常程序的內存空間是專用的,兩個程序的空間互不沖突,普通用戶程序不可以訪問其他程序的內存空間!
2. 編譯系統,編譯程序,庫函數,之間有什麼關系
由庫提供的,即不是編譯器環境也不是系統編譯器調用庫調用系統服務只不過有的編譯器集成了庫,庫並不是編譯器必須攜帶的,所以你可以自己指定庫的位置
3. 關於C程序的編譯問題
如果你要跨平台編譯C程序,有很多要注意的。
1 基本上來說,依賴的頭文件和動態庫本身必須是跨平台的。(windows的MFC就不要提了。)
2 程序中如果涉及的內存操作,得關注類型位長是否一致。
3 操作系統差異,有些技術和實現細節並不通用,例如linux的一些LPC操作WINDOWS沒有、線程操作有差異等等。
4 還有編譯器對c的標准實現不一致。(c的標准化實現差異還不算大,c++就差異很大了)
5 還有部分系統差異。例如:路徑表示不一樣等等。
其他的就是細節了。
4. 為什麼用C++6.0編譯不對
看看在你的程序最前面有沒有這一行#include "stdafx.h"沒有的話,加上再試試
致命錯誤C1010:在尋找預編譯指示頭文件時,文件未預期結束。
就是沒有找到預編譯指示信息的頭文件。
問題一般發生在:通過添加文件的方式,添加了一些cpp文件到一個MFC的程序,但該cpp文件並不是MFC,而是標準的C++。
解決方案1: 右鍵單擊項目工程中的cpp文件,在菜單Project->Settings->C/C++->Precompile Header,設置為第一項:Not using precompile headers。
解決方案2:在.cpp文件開頭添加包含文件stdafx.h。 #include"stdafx.h"
5. JAVA編譯找不到系統函數
1 基本設置問題
2 代碼錯誤
3 jdk 有的版本不支持某些方法,可以用其他的版本
6. C++編譯器問題
應該是跟系統函數名沖突了,換個別的名稱就可以了。
7. VC++編譯問題
可能是使用了未定義的成員函數,具體要看代碼了。
8. 什麼是與'malloc'類型沖突
malloc 是系統函數,很多編譯器都默認包括這個函數。不能被重新定義,否則沖突。
9. 編譯中c函數沖突怎麼辦
把自己的函數換個名字,或者在想辦法把unistd.h中的聲明屏蔽掉,或者乾脆不用huistd.h。
10. C語言中使用編譯器時system函數使用問題
加一個#include<stdlib.h>試一試