看到了一段代码:

上面这段代码来自于linux早期的内核代码,而让我突然间觉得不适应的是71行,在一个宏定义前面直接增加了一个符号。这样,合理吗?当然是合理的,只是我自己没有这么用过而已。
其实,我们可以缩减一下代码,做一个简单的demo。

也就是这个样子了,做一个编译测试:

其实,看到结果之后再复盘思考也是可以理解的。因为,这段代码肯定是被预处理器处理成了-123的输出而已。如果打印一个整形数据,当然是很容易理解的,这个也就是这段代码为什么可行的原因。只是,我自己在平时的编码中是没有遇到的。
那么,这个操作符是否可以对变量起作用呢?直接做一个测试代码:

测试一下:

也是没问题的。那么,如果是const,又将会是什么情况?

还是可以。那么,为什么呢?我们查看一下标准类的说明。
其实,只看这一段基本上就清楚了。除了这个二元操作之外,这个操作符还有一个一元操作。
而一元操作的效果,对于减号来说其实就是取反。
都说C语言简单,看起来我掌握的还是不扎实啊!我好奇,周边的同事小伙伴们,是否有人这部分非常熟悉呢?
















