欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c中宏定义

程序员文章站 2024-03-23 13:42:16
...

宏定义(宏替换、预编译指令)

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");
}