cnxh 发表于 2014-4-26 09:21:54

C语言的#define和#if ,#else,#endif联合使用

本帖最后由 cnxh 于 2014-4-26 09:23 编辑

设置指定寄存器的指定引脚置高
#define H_InOut_WriteBitH(Port,Pin)   #if Port == 0\
                                                            //DDRA的第PIN脚置高\                                       
                                #else\
                                //DDRB和其它的\
                                                      #endif\
如输入指令 H_InOut_WriteBitH(0,3),DDRA的pin3脚置高

但是宏定义不能通过,只要是 #define 宏定义替换中有#就会出错

takashiki 发表于 2014-4-26 09:30:27

编译指令不是这么用的~~~

浮华一生 发表于 2014-4-26 09:33:01

Port 是个变量吧,你搞个变量编译器怎么预编译?

霸气侧漏 发表于 2014-4-26 09:38:50

c语言博大精深

yinglively 发表于 2014-4-26 09:46:54

应该是下面这个样子

#define H_InOut_WriteBitH(Port,Pin)   
\if(Port == 0){
\                         //DDRA的第PIN脚置高
\else{
\                     //DDRB和其它的
\}

cnxh 发表于 2014-4-26 09:50:52

本意是H_InOut_WriteBitH(0,3), 涨开替换时是Port用0替换变成,
#if 0 == 0\
                                                            //DDRA的第PIN脚置高\                                       
                              #else\
                              //DDRB和其它的\
                                                      #endif\

huangqi412 发表于 2014-4-26 09:55:33

你这是变量,人家未仆先知?

cnxh 发表于 2014-4-26 09:55:50

yinglively 发表于 2014-4-26 09:46
应该是下面这个样子

这样我知道,我原来就是这样的,调用函数,主要就是要刷新显示屏,调用函数太耗时,宏定义直接,端口设置

cnxh 发表于 2014-4-26 09:59:11

H_InOut_WriteBitH(0,3), PORT定义的是数字,不是变量名

DevLabs 发表于 2014-4-26 11:21:06

宏是预处理, 预处理哎.......
C基础不过关.....

javenreal 发表于 2014-4-26 11:49:45

你这是用宏来定义宏。 好像是不行的,或者要其他很特殊的写法,什么多个#号之类的。应该用5楼的写法。

zly_1980 发表于 2014-4-27 11:57:55

参考AVR系统带的头文件就很清楚怎么使用拉。

yyts 发表于 2014-4-27 12:08:05

#if Port == 0

#define H_InOut_WriteBitH(Port,Pin)   ....

#else

#define H_InOut_WriteBitH(Port,Pin)   ...

#endif

yinglively 发表于 2014-4-28 07:12:36

cnxh 发表于 2014-4-26 09:55
这样我知道,我原来就是这样的,调用函数,主要就是要刷新显示屏,调用函数太耗时,宏定义直接,端口设置 ...

#if
#else
#endif
是编译选项。在编译时二者只能选其一,无法在程序中使用。
页: [1]
查看完整版本: C语言的#define和#if ,#else,#endif联合使用