宏定义(宏替换、预编译指令)
define指令
1、定义标识
#ifdef _cplusplus 标识支持c++语法 //防止文件重复引入(早期使用宏函数,之后版本可用#pragma once)
2.定义常数(便于修改和阅读)
#define MAX 100 int MIN = 40;(区别:Java中常量有类型)
3.定义“宏函数”
例一:
#include <stdlib.h>
#include <stdio.h>
void dn_com_jni_read(){
printf("read\n");
}
void dn_com_jni_write(){
printf("write\n");
}
//NAME是参数
#define jni(NAME) dn_com_jni_##NAME();
void main(){
jni(write);//替换:dn_com_jni_write();
system("pause");
}
带参数的宏函数,例二,Log输出:
#include <stdlib.h>
#include <stdio.h>
//日志输出
//__VA_ARGS__ 代表可变参数
#define LOG(FORMAT,...) printf(##FORMAT,__VA_ARGS__);
void main(){
//printf("%s%d\n","大小",89);
LOG("%s%d\n", "大小:", 89);
system("pause");
}
替换,例三,Log级别:
#include <stdlib.h>
#include <stdio.h>
//日志会有级别
#define LOG_I(FORMAT,...) printf("INFO:"); printf(##FORMAT,__VA_ARGS__);
#define LOG_E(FORMAT,...) printf("ERRO:"); printf(##FORMAT,__VA_ARGS__);
void main(){
LOG_E("%s%d\n", "大小:", 89);
system("pause");
}
简写,例四:
#include <stdlib.h>
#include <stdio.h>
//升级版
#define LOG(LEVEL,FORMAT,...) printf(##LEVEL); printf(##FORMAT,__VA_ARGS__);
#define LOG_I(FORMAT,...) LOG("INFO:",##FORMAT,__VA_ARGS__);
#define LOG_E(FORMAT,...) LOG("ERRO:",##FORMAT,__VA_ARGS__);
#define LOG_W(FORMAT,...) LOG("WARN:",##FORMAT,__VA_ARGS__);
void main(){
LOG_E("%s%d\n", "大小:", 89);
system("pause");
}