各种编程语言概述

PHP是Hypertext Pre-Processor(超文本预处理器)的缩写,它是一种服务器端的HTML脚本/编程语言。PHP语法上与C相似,可运行在Apache, Netscape/iPlanet, 和 Microsoft IIS Web 服务器上。

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++的区别:

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);
   ...
}

 

posted on 2015-06-29 15:47  joannae  阅读(481)  评论(0编辑  收藏  举报

导航