C预编译问题

来源:百度知道 编辑:UC知道 时间:2024/06/07 04:00:27
源码如下。
我的问题是,如果在源码中加入了#ifdef和#endif对,并且其间的内容参与编译,会发现main函数中的i, oo和oe变量的值会自动改变。如果将DEBUG给#undef掉,则不会自动改变……这是怎么回事?麻烦高手解答……感激不尽!

#define BASE_ADDR 0x220

#define INPORT_OFFSET 6
#define OUTPORT_OFFSET 13

#define ENABLE b!=0x80

#define DEBUG 1

void soutportb(int port_addr,unsigned char b)
{int i;
printf("\n\n******Simu-OutPort******\n");
for(i=0;i<8;i++)
{
if((b>>(7-i))&0x01)
{
printf("1");
}
else printf("0");
}
printf("\n************************\n");
}

char sinportb(int port_addr)
{int i,weight=1;char b=0,s[8];
printf("\n\n******Simu-InPort******\nPlease enter the byte you want to simulate (BINARY): ");
scanf("%s",s);
for(i=0;i<8;i++)
{
b=b+(s[7-i]-'0')*weight;
weight=weight*2;

这不可能吧,你的ifdef中间的内容仅仅是printf而已,不会对运行结果有影响的,应该每次都是oo变,oe不变,除非你改了最上面的那些常量。

太高深了,我编译你这段程序,终于调试得不报错了,但编译器出错了,但没崩溃,估计是编译器不行,C-Free 4.0