• 各种编程语言概述


    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);
       ...
    }
  • 相关阅读:
    mahout下的KMeans Clustering实现
    信号量、互斥体和自旋锁
    找出二叉树中两个节点的最低共同父节点
    C/C++中volatile关键字
    函数指针和指针函数
    java终止线程的通用机制
    我的一次重构实践
    新手浅谈Future
    线程中添加线程
    死锁
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/4607646.html
Copyright © 2020-2023  润新知