Android NDK基础9:C_预编译_宏定义_宏替换

include指令

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdlib.h>
#include <stdio.h>

//预编译(预处理),为编译做准备工作,完成代码文本的替换工作
//C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include
//C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\crt\src

//头文件告诉编译器有这样一个函数,连接器负责找到这个函数的实现

void main() {
//#include "my.txt"
//printf("%s\n", "I am a little boy!");
}

my.txt

1
printf("%s\n", "I am a little boy!");

define指令

定义标示

1
//#ifdef __cplusplus 标识支持C++语法

防止文件重复引入

A.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//老版本:如果没有定义AH,定义AH
//#ifndef AH
//#define AH
//#include "B.h"
//
//void printfA();
//
//#endif

//新版本:该头文件只被包含一次,让编译器自定处理好循环包含问题
#pragma once
#include "B.h"

void printfA();

B.h

1
2
3
4
5
6
7
8
9
10
11
12
//#ifndef BH
//#define BH
//#include "A.h"
//
//void printfB();
//
//#endif

#pragma once
#include "A.h"

void printfB();

main.c

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdlib.h>
#include <stdio.h>

#include "A.h"

void printfA() {
printf("print A");
}

void main() {
printfA();
}

定义常数(便于修改与阅读)

1
2
3
4
5
6
7
8
9
#define MAX 100
//int MIN = 40;

void main() {
int i = 90;
if (i < MAX) {
printf("比MAX小..");
}
}

定义“宏函数”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void jni_read() {
printf("read\n");
}

void jni_write() {
printf("write\n");
}

//NAME是参数
#define jni(NAME) jni_##NAME();
//webrtc JNI函数名称很长,也是JOW宏函数缩短函数名称

//日志输出
//__VA_ARGS__可变参数
//#define LOG(FORMAT,...) printf(##FORMAT, __VA_ARGS__);
//日志会有级别
//#define LOG_I(FORMAT,...) printf("INFO:"); printf(##FORMAT, __VA_ARGS__);
//#define LOG_E(FORMAT,...) printf("ERRO:"); printf(##FORMAT, __VA_ARGS__);

//升级版本
#define LOG(LEVEL,FORMAT,...) printf(##LEVEL); printf(##FORMAT, __VA_ARGS__);
#define LOG_I(FORMAT,...) LOG("INFO:", ##FORMAT, __VA_ARGS__);
#define LOG_E(FORMAT,...) LOG("ERROR:", ##FORMAT, __VA_ARGS__);
#define LOG_W(FORMAT,...) LOG("WARN:", ##FORMAT, __VA_ARGS__);

//Android
//#define LOGI(FORMAT,...) __android_log_print(ANDROID_LOG_INFO, "jason", FORMAT, ##__VA_ARGS__);
//LOGI("%s","fix");
//替换
//__android_log_print(ANDROID_LOG_INFO, "yezhou", "%s", "fix");
1
2
3
4
5
6
7
8
void main() {
jni(write); //替换:jni_write();

LOG_I("%s%d", "大小:", 89);
//替换成:printf("INFO:"); printf("%s%d", "大小:", 89);

getchar();
}

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2020 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :