各种编程语言概述
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公司授权的。
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); ... }