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

include指令

#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

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

define指令

定义标示

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

防止文件重复引入

A.h

//老版本:如果没有定义AH,定义AH
//#ifndef AH
//#define AH
//#include "B.h"
//
//void printfA();
//
//#endif

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

void printfA();

B.h

//#ifndef BH
//#define BH
//#include "A.h"
//
//void printfB();
//
//#endif

#pragma once
#include "A.h"

void printfB();

main.c

#include <stdlib.h>
#include <stdio.h>

#include "A.h"

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

void main() {
    printfA();
}

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

#define MAX 100
//int MIN = 40;

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

定义“宏函数”

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");
void main() {
    jni(write); //替换:jni_write();

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

    getchar();
}

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/02/25/android-ndk-basic-c-precompile-macro-definition-macro-replacement/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
Android NDK基础9:C_预编译_宏定义_宏替换
include指令 #include <stdlib.h> #include <stdio.h> //预编译(预处理),为编译做准备工作,完成代码文本的替换工作 //C:\Program Files (x86……
<<上一篇
下一篇>>
文章目录
关闭
目 录