当前位置:   article > 正文

c语言头文件jni.h,C语言基础及指针⑩预编译及jni.h分析

jni.h

在上篇中我们了解了 , 多类型集合的联合体 , 固定值集合的枚举 , 内容相对比较简单 , 今天我们谈谈预编译 , 也是本系列最后一个知识点 , C语言基础系列就要告一段落了 , 要开始我们的jni系列了 , JNI(Java Native Interface) 是java与C/C++进行通信的一种技术 , 使用JNI技术,可以java调用C/C++的函数对象等等,Android中的Framework层与Native层就是采用的JNI技术 。

预编译

预编译(预处理,宏定义,宏替换)这种叫法 , 关键字#define , 其本质是替换文本。

首先我们了解一下C语言的执行过程:

编译 --> 生成目标代码(.obj)

连接 --> 将目标代码与C函数库合并 , 生成最终可执行文件

执行

预编译 , 主要在编译时期完成文本替换工作 , 常见的预编译指令有: #include,ifndef,#endif,define,#pragma once等等 。

我们在jni.h头文件中 , 可以看到较多的预编译指令 , 例如:

#if defined(__cplusplus)

typedef _JNIEnv JNIEnv;

typedef _JavaVM JavaVM;

#else

typedef const struct JNINativeInterface* JNIEnv;

typedef const struct JNIInvokeInterface* JavaVM;

#endif

如果编译环境是C++, 则使用:

typedef _JNIEnv JNIEnv;

typedef _JavaVM JavaVM;

C语言编译环境 , 则使用:

typedef const struct JNINativeInterface* JNIEnv;

typedef const struct JNIInvokeInterface* JavaVM;

这里的定义就是我们后需要结束的JNIEnv指针 , 在C++环境中JNIEnv是一个一级指针 , 但是在C语言环境中 , 他是一个二级指针 ,这个我们将在jni系列中 , 再详细说明 。

预编译示例

// 定义一个常数

#define MAX 100

void main() {

int i = 99;

if (i < MAX) // 在编译时期, 会将MAX替换成100

{

printf("i 小于 MAX\n");

}

}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/992676
推荐阅读
相关标签
  

闽ICP备14008679号