各种编程语言概述
PHP是Hypertext Pre-Processor(超文本預(yù)處理器)的縮寫,它是一種服務(wù)器端的HTML腳本/編程語言。PHP語法上與C相似,可運(yùn)行在Apache, Netscape/iPlanet,?和?Microsoft IIS Web?服務(wù)器上。
PHP與Java的區(qū)別:
PHP具有和JAVA類似的Class關(guān)鍵字。因?yàn)椴恍枰摂M機(jī),以致速度比JAVA快5倍。
PHP與Javascript的區(qū)別:
PHP允許你直接在HTML文件里寫入簡單的腳本,這一點(diǎn)與Javascript非常相似。而不同的是,PHP不依賴于瀏覽器,是服務(wù)器端的語言,讀取數(shù)據(jù)庫把內(nèi)容顯示到頁面;而Javascript卻是一種客戶端的嵌在HTML中的語言,控制頁面內(nèi)容。
?
Javascript與Java的區(qū)別
1. 由不同公司開發(fā)的。Java是Sun Microsystems公司的產(chǎn)品;JavaScript是Netscape公司的產(chǎn)品,Java是經(jīng)過Sun Microsystems公司授權(quán)的。
2. JavaScript是基于對(duì)象和事件驅(qū)動(dòng)的腳本語言,它本身提供了非常豐富的內(nèi)部對(duì)象;Java是面向對(duì)象的,即使是開發(fā)簡單的程序也必須設(shè)計(jì)對(duì)象。 3. 嵌入方式不一樣。JavaScript使用 4. 在瀏覽器中的執(zhí)行方式不一樣。JavaScript是解釋性編程語言,源代碼在法網(wǎng)客戶端執(zhí)行之前不需要經(jīng)過編譯,即JavaScript語句本身隨Web頁面一起下載下來,由瀏覽器解釋執(zhí)行;而Java代碼在傳遞到客戶端執(zhí)行之前,必須經(jīng)過編譯,因而客戶端上不必需有編譯器,但是必須有仿真器或解釋器。它可以通過編譯器或解釋器實(shí)現(xiàn)獨(dú)立于某個(gè)特定平臺(tái)的編譯代碼。 5. 變量不一樣。JavaScript的變量聲明采用弱類型,即變量在使用前不需要做聲明,而是解釋器在運(yùn)行時(shí)檢查其數(shù)據(jù)類型(這叫做動(dòng)態(tài)聯(lián)編);Java采用強(qiáng)類型變量檢查,采用靜態(tài)聯(lián)編,即在編譯時(shí)就實(shí)現(xiàn)強(qiáng)類型檢查。Java與C++的區(qū)別:
1. 完全面向?qū)ο?#xff0c;比如:main函數(shù)以static的形式包含在類中
2.?Java跨平臺(tái),即不同的操作系統(tǒng)都可以通過JVM來解釋Java程序,而C、C++、C#則是與平臺(tái)相關(guān)的,有些指令只在某些操作系統(tǒng)中才能執(zhí)行;
3.Java不支持系統(tǒng)調(diào)用,即無法與操作系統(tǒng)進(jìn)行交互,這是由它跨平臺(tái)的特點(diǎn)決定的,而C則可以調(diào)用系統(tǒng)中的指令,如fork()。這也就是為什么Java中只有線程(Thread)概念而沒有進(jìn)程(Process)概念,而C兩者均有;
4.?Java無法對(duì)內(nèi)存進(jìn)行控制,而C則可以通過指針對(duì)內(nèi)存進(jìn)行人為分配(JAVA中沒有指針,?但Java中所有的對(duì)象都是以地址訪問的)。
5. 類的默認(rèn)成員是protect(C++中是private)
6. C++中string相當(dāng)于Java中的StringBuff;C++中const string相當(dāng)于Java中的String。也就是說,C++中的string可變,而Java中String不可變。 所以在Java中使用+操作合并字符串時(shí),其實(shí)是重新申請(qǐng)了新空間,把兩個(gè)字符串賦值給新空間。
7. Java的數(shù)組在聲明時(shí)不能直接指定列數(shù)或者行數(shù),比如String s[50]是錯(cuò)誤的。正確的做法是:
String s[] = new String[50];
8. 垃圾回收機(jī)制的區(qū)別。C++用析構(gòu)函數(shù)回收垃圾,Java自動(dòng)回收(GC算法),寫C和C++程序時(shí)一定要注意內(nèi)存的申請(qǐng)和釋放。
9.?Java用接口(Interface)技術(shù)取代C++程序中的多繼承性,省卻了多繼承在實(shí)現(xiàn)和維護(hù)上的復(fù)雜性。
?
C++與C的相互調(diào)用
1. extern “C”的使用(僅在C++中,C中只有extern)
? ?1)在C++中使用C語言定義的語句。
/* c語言頭文件:cExample.h */ #ifndef C_EXAMPLE_H #define C_EXAMPLE_H extern int add(int x, int y); //在C語言的頭文件中,對(duì)其外部函數(shù)指定為extern#endif/* c語言的實(shí)現(xiàn)文件:cExample.c */ #include "cExample.h" int add(int x, int y) { return x + y; }/* c++實(shí)現(xiàn)文件,調(diào)用add:cppFile.cpp */ extern "C" //在C++中使用extern "C"{}包裹C頭文件或者C語言編寫的.DLL ? { ????#include "cExample.h"; ??}int main(){add(2, 3);return 0;}2)C中引用C++語言中的函數(shù)或者變量時(shí),C++的頭文件需要加上extern “C”,并且C中還需將C++中定義的extern “C”函數(shù)聲明為extern類型
/* c++頭文件cppExample.h */ #ifndef CPP_EXAMPLE_H #define CPP_EXAMPLE_H extern "C" int add(int x, int y); //C++的頭文件需要加上extern "C"#endif/* c實(shí)現(xiàn)文件cFile.c */ extern int add(int x, int y); //C中將C++中定義的extern "C"函數(shù)聲明為extern類型。int main() { add(2, 3); return 0; }2. 為什么需要extern "C"
C編譯器編譯函數(shù)時(shí)不帶參數(shù)的類型信息,如?int foo( float x ) ,C編譯器會(huì)將此函數(shù)編譯成類似_foo的符號(hào).
而C++編譯器為了實(shí)現(xiàn)函數(shù)重載,會(huì)在編譯時(shí)帶上函數(shù)的參數(shù)信息。如它可以把上面的函數(shù)編譯成類似于_foo_float這樣的符號(hào)。
使用extern "C"則是告訴編譯器依照C的方式來編譯封裝接口
3. C怎么調(diào)用C++中的重載函數(shù)
C++中必須封裝單獨(dú)的接口共C調(diào)用
// C++ Code void foo( int x ); void foo( float x );extern "C" void foo_i( int x ) {foo( x ); } extern "C" void foo_f( float x ) {foo( x ); }// C Code extern void foo_i( int x ); extern void foo_f( float x ); void ccc( int x1, float x2 ) {foo_i( x1 );foo_f( x2 );// ... }4. 如果C中想調(diào)用C++中的成員函數(shù)(包括虛函數(shù)),則需要提供一個(gè)簡單的包裝(wrapper)
// C++ code: class C {...virtual double f(int); };extern "C" double call_C_f(C* p, int i) // wrapper function {return p->f(i); }//C code extern double call_C_f(struct C* p, int i);//聲明 void ccc(struct C* p, int i) {double d=call_C_f(p,i);... }?
轉(zhuǎn)載于:https://www.cnblogs.com/qionglouyuyu/p/4607646.html
總結(jié)
- 上一篇: 计算机网络之传输层:2、UDP协议
- 下一篇: 操作系统之进程管理:19、死锁的处理策略