NDK学习系列--第五篇
简介
本篇分析写NDK demo中用到的一些新的知识点
1、__cplusplus关键字
在声明头文件时,用到了
#ifdef __cplusplus
extern "C" {
#endif
和
#ifdef __cplusplus
}
#endif
__cplusplus和extern "C"是一起使用的,目的是为了实现C++与C兼容,extern “C”是用来在C++程序中声明或定义一个C的符号。
2、#define 宏定义
通过#define S11 7定义常量。用 #define 定义S11这个标识符来表示一个常量,常量值为7。其特点是:定义的
标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了。(相当于Java中的常量)。预编译又叫
预处理。预编译不是编译,而是编译前的处理。这个操作是在正式编译之前由系统自动完成的。
宏定义最大的好处是“方便程序的修改”。使用宏定义可以用宏代替一个在程序中经常使用的常量。注意,是“经
常”使用的。这样,当需要改变这个常量的值时,就不需要对整个程序一个一个进行修改,只需修改宏定义中的常
量即可。且当常量比较长时,使用宏就可以用较短的有意义的标识符来代替它,这样编程的时候就会更方便,不
容易出错。因此,宏定义的优点就是方便和易于维护。
3、static关键字
C++中的static关键字有两种用法。
第一种是面向过程设计的static:
在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,
如下:
//Example 1
#include <iostream.h>
void fn();
static int n; //定义静态全局变量
void main()
{
n=20;
cout<<n<<endl;
fn();
}
void fn()
{
n++;
cout<<n<<endl;
}
静态全局变量有以下特点:
i ) 该变量在全局数据区分配内存;
ii ) 未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的,除非它被显式初始化);
iii ) 静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;
第二种面向对象的static
静态数据成员:只能在体外进行初始化。如int Box::height = 10;形式为:数据类型 类目::静态数据成员 = 初值。
静态成员函数:是类的一部分,不是对象的一部分,调用方式可以是类名::方法名和 对象名字.方法名。
四、JNIEnv在C和C++中的区别
在C中是二级指针,调用方式是(*JNIEnv)->方法名。
在C++是一级指针,调用方式是JNIEnv->方法名。