C语言唯一的三元操作符
如果有两个变量,我希望打印出最大的一个,怎么做呢,很简单一个if-else
语句搞定,嗯嗯,👍。
1 | /*beginner/ternary/ternary1.c*/ |
今天来一个比较搞定的三元操作符,前面有提过什么事三元操作符,参考逻辑运算符原文,简单的理解就是:a?b:c
,如果a为真就返回b,如果a为假就返回c。
所以rst = a?b:c
用if-else
来表达就是:
1 | if (a) |
所以上面的程序可以简化为:
1 | /*beginner/ternary/ternary2.c*/ |
看到没有,奇迹就是用1行能写出4行的效果。
或许你会说用python可以1行写出c语言10行甚至100的功能,这个我承认,所以下一阶段开讲Python
或许你问了,有了if-else还要这个干吗,简单,我们可以做很多事情,比如在宏定义里面定义下面的一行
1 |
后面直接调用MAX就可以得出最大值了,不过这个写法目前看来OK,如果严谨说起来是有bug的,且听下回分解。
另外一个比较有用的例子如下,我觉得很适合英语国家,在我们中国不存在这个问题,就是如果你有一个叔叔和几个叔叔的表达方式不一样:
- 中文:我有一个叔叔,我有N个叔叔(N>1)
- 英文:我有一个uncle,我有N个uncles(N>1)
看到没有,有好几个叔叔就要加个s,这个怎么来办呢,有了三元操作符,解决方案如下:
1 | /*beginner/ternary/ternary3.c*/ |
编译
编译也有所不同,方法为:
1 | #beginner/ternary/Makefile |
这会产生可执行程序,当程序被执行时,它会产生下列结果:
1 | $ ./ternary1 |