C语言基础

 

#include <stdio.h>


#define _ F-->00||-F-OO--;

int F=00,OO=00;

void F_OO()
{

_-_-_-_


_-_-_-_-_-_-_-_-_


_-_-_-_-_-_-_-_-_-_-_-_

_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_

_-_-_-_-_-_-_-_-_-_-_-_


_-_-_-_-_-_-_-_


_-_-_-_

}

main()
{
F_OO();
printf("F: %d OO: %d\n",F,OO);
}
问这段程序输出是什么?

这代码主要就是运算符优先级的问题

我们先看宏定义的_ 是什么值

F-->00就是判断F是否大于0,然后F--

如果F-->00结果为真,那么后半部分-F-OO--是不执行的,OO值不变

如果F-->00结果为假,那么后半部分-F-OO--结果是0,然后OO=-1

F_OO()函数里面
第一行_-_-_-_
被替换成
F-->00||-F-OO--;-F-->00||-F-OO--;-F-->00||-F-OO--;-F-->00||-F-OO--;

也就是

F-->00||-F-OO--;

-F-->00||-F-OO--;

-F-->00||-F-OO--;

-F-->00||-F-OO--;

执行 F-->00||-F-OO--; 结果为0,然后F=-1, OO=-1
执行 -F-->00||-F-OO--; 结果为1,然后F=-2, OO=-1

F_OO()是void类型,所以里面的运算结果不用管了,只要管全局的F和OO就可以了

可以看出执行一次F-->00||-F-OO--;  F减1,OO减1

执行一次-F-->00||-F-OO--;  F减1,OO不变

因此该代码运行结果就是F的值是负的_ 的个数,OO的值是负的F_OO()的行数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值