㈠ gcc與diab編譯器的兼容性問題
不好意思剛看到,不同編譯器編譯的結果不能鏈接到一起,理由主要有以下兩方面:一是不同編譯器可能對變數名做不同處理,主要針對c++,好像沒有什麼編譯器對c語言的變數名改變,舉個例子,假設c++中的變數test_var,用兩種不同編譯器編譯完該結果可能是Diab_test_var和GCC_test_var成為不同的變數,那麼對於連接器來說就是不同的變數怎麼會鏈接到一起是吧。c好像不存在文件名問題,但是c會遇到第二個方面。第二個方面就是不同的編譯器會提供一些內部函數比如*(乘以)這個操作在編譯器里有定義,有具體的代碼來實現,如果編譯器不同實現的函數名不同,不會鏈接到一起。當然還有更復雜的原因,可能我也不太了解。這些是我的理解,可能不全,但是可以肯定的是,不同編譯器編譯的二進制文件不能鏈接到一起使用。
至於你說的BSP是風河提供的會不會不兼容的問題,是這樣的。通常對於BSP中的c語言部分,無所謂兼不兼容,因為c語言要是ANSI標準的話所有的編譯器都會支持。BSP中的匯編部分跟編譯器相關,但也是格式上的問題。一般vxworks提供gcc版的bsp(提供不提供其他編譯器的BSP我不清楚,因為我們用的是gcc),所以應該是兼容的。假如真的不提供,可以按照gcc匯編語法,把BSP中的函數和變數以及偽指令部分更改成符合GCC語法即可,整體的匯編不需要更改,這部分工作很小的應該不難。
我知道的就這些,希望能幫到你。
㈡ FORTRAN編程兼容問題。我的編譯器是Visual Studio 2013, Fortran為Intel Visual Fortran XE2013,
編譯器不兼容,如gfortran或f95編譯器裡面,讀寫二進制文件是open語句中的(form='unformatted',access='direct',recl=m*n)
在visual fortran裡面會出現問題,將三個選項合並為(form='binary')即可通過。
具體在哪裡出現問題,編譯器會提示的
㈢ 不同的c語言編譯系統差別在哪裡代碼是否 存在兼容性的問題
ANSI
C
一般都可以支持,但也涉及到不同版本的C標準的兼容性問題,比如VC6不支持C99,VS2003,2005,2008,20120等就可以部分支持C99標准;而且很多標准並沒有規定實現,不同的編譯器實現可能不同,比如C標准只規定了short<=int<=long,但並沒有規定位元組數,導致不同的編譯器數據類型的大小各不相同。
非
ANSI
C標準的話,不同的編譯器一般都有不同的實現,需要分別實現。
在移植到不同編譯器的時候這些都要注意處理,比較常規的做法是數據類型和函數等自己根據不同編譯器封裝成一個統一的格式,在程序中使用封裝後的數據類型或函數,而不要使用原生類型,這樣在移植時只需要在封裝的地方根據編譯器的不同進行修改就可以了,不需要再修改源代碼。
㈣ C語言代碼運行不出為什麼
C語言代碼運行不出現象可能有很多原因,以下是一些常見的原因和解決方法:
編譯錯誤:代碼中存在語法錯誤或類型錯誤,導致編譯失敗。可以通過編譯器的錯誤提示信息來定位錯誤,逐一修正後重新編譯。
運行錯誤:代碼編譯成功,但在運行時出現錯誤,如數塵棚旦組越界、空指針、除零等錯誤。可以通過調試工具或列印調試信息等方和喚法來定位錯誤。
缺少庫文件或頭文件:代碼中使用了某些庫函數或頭文件,但是編譯器無法找到相應的庫文件或頭文件,導致編譯失敗。可以檢查編譯器的搜索路徑是否正確,或手動添加缺失的庫文件或頭文件。
環境問題:代碼在不同的操作系統、編譯器或硬體平台上可能存在差異,導致代碼無法正常運行。可以檢查編譯器和操作系統的兼容性,或在特定的環境中運行代碼。
邏輯問題:代碼邏輯存在問題,導致代碼無法正確執行。可以檢查代碼邏輯是否正確,是否存在死循環、遞歸深度過大等問題。
綜上,C語言代碼運行不出現象可能有多種原因,需要逐一排查解決。可以利用編譯器和調試工具來定位問題,或參考其他人的代碼或文派擾檔來解決問題。