赞
踩
在上篇中我们了解了 , 多类型集合的联合体 , 固定值集合的枚举 , 内容相对比较简单 , 今天我们谈谈预编译 , 也是本系列最后一个知识点 , 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");
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。