我写了一点C语言,我能很好地阅读它,对它的功能有一个大致的了解,但每次我遇到一个宏,它都会让我完全不知所措.最后,我不得不记住宏是什么,并在阅读时在脑海中替换它.我遇到的那些直观易懂的函数总是像小函数一样,所以我总是想知道为什么它们不只是函数.
我能理解在预处理器中为调试或跨平台构建定义不同构建类型的需要,但定义任意替换的能力似乎只会让已经很难理解的语言变得更难理解.
为什么要为C引入如此复杂的预处理器?有没有人举过一个使用它的例子,让我明白为什么它似乎仍然被用于简单的if#debug风格的条件编译之外的目的?
编辑:
读了很多答案后,我还是不明白.最常见的答案是内联代码.如果inline关键字不能做到这一点,那么要么它有很好的理由不这样做,要么实现需要修复.我不明白为什么需要一种完全不同的机制来表示"真正内联这段代码"(除了内联出现之前编写的代码).我也不理解有人提到的"如果放在函数里太傻了"的 idea .当然,任何接受输入并产生输出的代码都最好放在函数中.我想我可能没有理解它,因为我不习惯于编写C语言的微优化,但是预处理器感觉就像是几个简单问题的复杂解决方案.