C语言中的宏undef & define
来源:互联网 发布:安卓手机主题软件 编辑:程序博客网 时间:2024/05/16 10:35
在做一个菜单的时候,想首次进入菜单的时候进入方法1不是首次进入的时候进入方法2,由于他们之间有公共的一部分 当时用的方法是 利用#define FIRST 然后第一次用完后undef 后面判断FIRST有没定义 ,#ifdef FIRST。。。但在测试的时候却发现运行不尽人意,第二天偶尔看见一篇关于宏定义的解说,才发现 自己从写代码的初期就错了,(语法错误 ) 宏的定义 在 预处理的时候进行处理,记得很清楚,用却想当然。
void init_matrix(unsigned char temprat_inter,unsigned char temprat_float, unsigned char menu_flag, unsigned char key_argv) { if(menu_flag % 10 == 0){ //清屏幕 Write_com(0x01);//清显示:清屏幕指令 switch( menu_flag) {case FIRST_INTO:menu_flag = HOME_PAGE;case HOME_PAGE:{ string[0] = '0' + temprat_inter/10; string[1] = '0' + temprat_inter%10 ; string[2] = '.'; string[3] = '0' + temprat_float%10;//前4位显示 menu_flag != TEMPRAT_EXCEED ? strcpy(&string[7],"safe") : strcpy(&string[7],"Warning") ; strcpy(string1,"MenuSet");}break;//对温度进行显示显示主页case MENU_DISPLAY:{//菜单展示 memset(string,0 ,sizeof(string)); memset(string1,0,sizeof(string1)); //将 数组清空,为下面的菜单切换 做准备 strcpy(string," PhoneSet "); strcpy(string1," TemperatSet"); #define MENU_SET_INIT_SUCESS}break;case TEMPRAT_SET_MENU:{}break;case PHONE_SET_MENU:{}break; default: break; }} elseif(menu_flag %10 == SECOND_INTO){ //第二次进入根据 菜单页面 选择刷新部分 温度下降的很慢 ?什么原因???根据 键值 移动光标//else{switch((menu_flag - 1 )){case HOME_PAGE:{ WriteAddress(0x00);//写如数据的首地址 WriteData('0' + temprat_inter/10); WriteData('0' + temprat_inter%10); WriteData('.'); WriteData('0' + temprat_inter%10); }break;case MENU_DISPLAY: { /*消去初始化光标的 影响 我们把宏注销掉*/ #ifdef MENU_SET_INIT_SUCESS #undef MENU_SET_INIT_SUCESS #endif //if(key_argv == NULL) if(key_argv == ADD)FIRST_LINE; //只是光标的移动即可 if(key_argv == DEC)SECOND_LINE;//向下则光标移动到下面 WriteData('k' + temprat_inter/10);}break;case TEMPRAT_SET_MENU:case PHONE_SET_MENU: break;default : WriteAddress(0x00);//写如数据的首地址 WriteData('k' + temprat_inter/10);}} } void __1602lcd_main( unsigned char temprat_inter,unsigned char temprat_float, unsigned char menu_flag, unsigned char key_argv) //主函数 不敢用指针,只敢用原型 { unsigned char i,j; i = 0; //while(num [i]!= 'd' ){//这个不可以 //string[i] = num[i];//i++; //} // string[1]='s'; //这个可以 init_matrix(temprat_inter,temprat_float,menu_flag,key_argv); if(menu_flag == FIRST_INTO){ LcdInt(); //调用LCD初始化函数 delay(10); //while(1) //{ Write_com(0x01);//清显示:清屏幕指令}if(menu_flag%10 == FIRST) //首次进入{ __CUT__TIME__;delay(5); WriteAddress(0x00); // 设置显示位置为第一行的第1个字 __CUT__TIME__;delay(5); i = 0; while(string[i] != '\0') //'\0'是数组结束标志 {// 显示字符WWW.RICHMCU.COMWriteData(string[i]);i++;__CUT__TIME__;//delay(100); } WriteAddress(0x40); // 设置显示位置为第二行的第1个字 i = 0; while(string[i] != '\0') //'\0'是数组结束标志{// 显示字符QUICK STUDY MCUWriteData(string1[i]);i++;__CUT__TIME__;//delay(100);} }//if(menu_flag%10 == SECOND_INTO){//WriteAddress(0x00); WriteData('4');WriteData('5');//}自己调的时候用//while(1);//delay(1000);//while(1); //delay(1000);//Write_com(0x08); //关闭显示 //while(1); //delay(3000); //延时 维持显示一段时间//Write_com(0x0c);//开显示 //while(1); //delay(3000); //延时 维持显示一段时间//Write_com(0x0f);//开光标 // while(1); //delay(1000); //延时 维持显示一段时间 //while(1); //Write_com(0x40); //设定CGRAM地址//delay(5);//for(j=0;j<8;j++ )//{//WriteData(User[j]);//写入自定义图形 ℃ //} //WriteAddress(0x05);//设定屏幕上的显示位置// delay(5); //WriteData(0x00); //从CGRAM里取出自定义图形显示//while(1); //}#ifdef MENU_SET_INIT_SUCESS FIRST_LINE;#endif }
#define NUM_1 2
#define total (NUM_1) + 4
int main()
{
int apple = 1,pear = 3;
if(apple == pear)
{
apple = 5;
#define NUM_1 3
}
printf("%d\n",(int)total);
#undef NUM_1
#define NUM_1 1
printf("%d\n",(int)total);
return 0;
}
这里答案是
7
5
这个预处理不受if的语句判断。所以上面if是没用的。
今天想用 宏__COVER 当成注释符号用 即是 用这个替换 // 这个后来发现不可行 比如:#define __COVER // 这时__COVER并不是替换//而是空这个需要注意,难道要用转义字符,(经过查询 /,不用转义) 这里发现宏定义并不是什么都替换的
- C语言中的宏undef & define
- C语言中的#undef
- c语言中的#undef
- C语言中的宏 #define
- #define #undef
- C语言中的宏定义 #define
- C语言中利用#define和#undef定义初始化数组,实现不同的初始化效果
- 程序猿之---C语言细节31(#define和#undef宏细节、#error、#pragma message("文本信息")、宏定义注释)
- c语言 #define 中的UL
- c语言 #define 中的UL
- c语言 #define 中的UL
- c语言 #define 中的UL
- c语言 #define 中的UL
- c语言 #define 中的UL
- C语言 #define 中的UL
- C语言中的#define宏定义 求一…
- macro definitions (#define, #undef)
- Preprocessor directives #define, #undef
- 《疯狂的程序员》小小感悟
- C/C++宏定义的可变参数
- 笔记(Cryptography)
- 万恶的c/c++——控制台输出 改写当前行
- 创业故事:腾讯的创始人们
- C语言中的宏undef & define
- 为Chrome增加右键翻译功能
- 索尼日本面试小结
- 星期天
- 一步一步写算法(之 算法总结)
- 控件使用心得
- jquery ui组件网址
- vs2008 C++ 没有找到MSVCR90D.dll 问题
- 常用按钮、文本框、表单等CSS样式13例