各類編程語言概述

PHP是Hypertext Pre-Processor(超文本預處理器)的縮寫,它是一種服務器端的HTML腳本/編程語言。PHP語法上與C類似,可運行在Apache, Netscape/iPlanet, 和 Microsoft IIS Web 服務器上。c++

PHP與Java的區別:算法

PHP具備和JAVA相似的Class關鍵字。由於不須要虛擬機,以至速度比JAVA快5倍數據庫

PHP與Javascript的區別:編程

PHP容許你直接在HTML文件裏寫入簡單的腳本,這一點與Javascript很是類似。而不一樣的是,PHP不依賴於瀏覽器,是服務器端的語言,讀取數據庫把內容顯示到頁面;而Javascript倒是一種客戶端的嵌在HTML中的語言,控制頁面內容。數組

 

Javascript與Java的區別瀏覽器

1. 由不一樣公司開發的。Java是Sun Microsystems公司的產品;JavaScript是Netscape公司的產品,Java是通過Sun Microsystems公司受權的。服務器

2. JavaScript是 基於 對象和事件驅動的腳本語言,它自己提供了很是豐富的內部對象;Java是 面向 對象的,即便是開發簡單的程序也必須設計對象。
3. 嵌入方式不同。JavaScript使用
4. 在瀏覽器中的執行方式不同。JavaScript是解釋性編程語言,源代碼在法網客戶端執行以前不須要通過編譯,即JavaScript語句自己隨Web頁面一塊兒下載下來, 由瀏覽器解釋執行;而 Java代碼在傳遞到客戶端執行以前,必須通過編譯,於是客戶端上沒必要需有編譯器,可是必須有仿真器或解釋器。它能夠經過編譯器或解釋器實現獨立於某個特定平臺的編譯代碼。
5. 變量不同。JavaScript的變量聲明採用弱類型,即變量在使用前不須要作聲明,而是解釋器 在運行時檢查其數據類型(這叫作動態聯編);Java採用強類型變量檢查,採用靜態聯編,即 在編譯時就實現強類型檢查。
 

Java與C++的區別:app

1. 徹底面向對象,好比:main函數以static的形式包含在類中編程語言

2. Java跨平臺,即不一樣的操做系統均可以經過JVM來解釋Java程序,而C、C++、C#則是與平臺相關的,有些指令只在某些操做系統中才能執行;函數

3.Java不支持系統調用,即沒法與操做系統進行交互,這是由它跨平臺的特色決定的,而C則能夠調用系統中的指令,如fork()。這也就是爲何Java中只有線程(Thread)概念而沒有進程(Process)概念,而C二者均有;

4. Java沒法對內存進行控制,而C則能夠經過指針對內存進行人爲分配(JAVA中沒有指針, 但Java中全部的對象都是以地址訪問的)。

5. 類的默認成員是protect(C++中是private)

6. C++中string至關於Java中的StringBuff;C++中const string至關於Java中的String。也就是說,C++中的string可變,而Java中String不可變。 因此在Java中使用+操做合併字符串時,實際上是從新申請了新空間,把兩個字符串賦值給新空間。

7. Java的數組在聲明時不能直接指定列數或者行數,好比String s[50]是錯誤的。正確的作法是:

String s[] = new String[50];

8. 垃圾回收機制的區別。C++用析構函數回收垃圾,Java自動回收(GC算法),寫C和C++程序時必定要注意內存的申請和釋放。

9. Java用接口(Interface)技術取代C++程序中的多繼承性,省卻了多繼承在實現和維護上的複雜性。

 

C++與C的相互調用

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語言的頭文件中,對其外部函數指定爲extern
  #endif

  /* c語言的實現文件:cExample.c */ 
  #include "cExample.h" 
  int add(int x, int y) 
  { 
    return x + y; 
  }

  /* c++實現文件,調用add:cppFile.cpp */ 
  extern "C" //在C++中使用extern "C"{}包裹C頭文件或者C語言編寫的.DLL
   {     
       #include "cExample.h";   
    }
   int main(){
     add(2, 3);
     return 0;
   }

2)C中引用C++語言中的函數或者變量時,C++的頭文件須要加上extern 「C」,而且C中還需將C++中定義的extern 「C」函數聲明爲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實現文件cFile.c */ 
  extern int add(int x, int y); //C中將C++中定義的extern "C"函數聲明爲extern類型。
  int main() 
  { 
    add(2, 3); 
    return 0; 
  }

2. 爲何須要extern "C"

C編譯器編譯函數時不帶參數的類型信息,如 int foo( float x ) ,C編譯器會將此函數編譯成相似_foo的符號.

而C++編譯器爲了實現函數重載,會在編譯時帶上函數的參數信息。如它能夠把上面的函數編譯成相似於_foo_float這樣的符號。

使用extern "C"則是告訴編譯器依照C的方式來編譯封裝接口

3. C怎麼調用C++中的重載函數

C++中必須封裝單獨的接口共C調用

// 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中想調用C++中的成員函數(包括虛函數),則須要提供一個簡單的包裝(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);
   ...
}
相關文章
相關標籤/搜索