Android NDK学习系列--第五篇(持续更新)

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->方法名。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容