C语言基础

来源:互联网 发布:数据实验室 编辑:程序博客网 时间:2024/06/05 14:32
 

#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()的行数