c/c++ 以 # 开头的都是预编译指令: #define、#include #if(判断表达式), #ifdef、#ifndef(判断宏)
#ifdef A
语句
#else
语句
#endif
-- 如果是头文件,那么#ifndef 相反
--- 功能: 判断A 表示符是否存在
******************************************************************
#ifndef __A____H__123 //如果没有__AH__这个宏,那么就编译#endif之间的这些代码,如果有的话,就不编译了
#define __A____H__123 //具体宏的名字是自定义的
//在#ifndef中的宏,一定要大写和下划线,必要的时候加数字,目的是为了避免和其他头文件中的宏名字冲突
//#ifndef __头文件名称__H_: 名称定义
int max(int a, int b);
int add(int a, int b);//函数的声明
#endif
******************************************************************
//条件预处理
// #define MESSAGE_TEXT 1
// #define MESSAGE_FILE 2
// #define MESSAGE_VIDEO 3
// #define MESSAGE_TYPE MESSAGE_TEXT
// int main(){
// #if MESSAGE_TYPE == MESSAGE_TEXT
// printf("文本消息.....");
// #elif MESSAGE_TYPE == MESSAGE_FILE
// printf("文件消息.....");
// #elif MESSAGE_TYPE == MESSAGE_VIDEO
// printf("视频消息.....");
// #else
// printf("没有这个类型......");
// #endif
// //extern "C":可以支持C/C++混合编译
// getchar();
// return 0;
// }
******************************************************************
常量和宏区别:
const: 需要指定类型
define: 只是一个替换工作,在编译的是时候执行
****** 1. 宏函数***********
/*定义宏函数*/
#define GET_MAX(A,B) A>B?A:B
void main(){
int result = GET_MAX(a, b);
system("pause")
}
*****2. 方法名称替换***********
int com_dreamsdeng_max(int a, int b){
return a > b ? a : b;
}
/*方法名称替换*/
#define call(METHOD_NAME1,A,B) com_dreamsdeng_##METHOD_NAME1(A,B)
void main(){
int a = 100;
int b = 200;
int result = call(max, 400, 50);
printf("%d------>打印出来\n", result);
system("pause");
}
*********************** 3. 宏实际中使用,日志打印*****************************
//日志输出
// #define LOG_E(FORMAT,...) printf("ERROR:"); printf(FORMAT,__VA_ARGS__);
// #define LOG_I(FORMAT,...) printf("INFO:"); printf(FORMAT,__VA_ARGS__);
// #define LOG_D(FORMAT,...) printf("DEBUG:"); 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_D(FORMAT,...) LOG("DEBUG:",FORMAT,__VA_ARGS__)
// #define LOG_E(FORMAT,...) LOG("ERROR:",FORMAT,__VA_ARGS__)
// int main(){
// LOG("Error","%d\n",200);
// LOG_D("%d\n",100);
// LOG_E("%s\n","Hello world!")
// getchar();
// return 0;
// }
*********************** 4. 系统内置宏 ****************************
特殊宏:
printf("%s 的 %d 行出错!\n", __FILE__, __LINE__); // 出错文件
printf("%s -- %s ", __DATE__, __TIME__); // 出错日期、时间