大C宏.有什么好处?

jdi*_*zle 5 c macros

我一直在使用一个主要由不再在公司工作的程序员编写的大型代码库.其中一位程序员显然在他心中有一个特殊的位置,用于非常长的宏.我可以看到使用宏的唯一好处是能够编写不需要在所有参数中传递的函数(建议在我阅读的最佳实践指南中使用).除此之外,我认为内联函数没有任何好处.

有些宏是如此复杂,我很难想象有人甚至写它们.我尝试用这种精神创造一个,这是一场噩梦.调试是非常困难的,因为它在调试器中将N +行代码变为1(例如,在这个大块代码中的某处存在段错误.祝你好运!).我必须实际拉出宏并运行它非宏观调试它.我能看到这个人编写这些内容的唯一方法是在调试之后通过函数自动生成它们(或者比我聪明并且第一次完美地编写它,这总是可能的) .

我错过了什么吗?我疯了吗?有没有我不知道的调试技巧?请填写我.我真的很想听听观众中的宏观爱好者.:)

Lou*_*nco 8

对我来说,宏的最佳用途是压缩代码并减少错误.缺点显然是在调试中,因此必须小心使用它们.

我倾向于认为,如果生成的代码不是一个数量级更小并且更不容易出错(意味着宏会处理一些簿记细节),那么它就不值得了.

在C++中,许多这样的用法可以用模板替换,但不是全部.有用的宏的一个简单示例是在MFC的事件处理程序宏中 - 没有它们,创建事件表将更难以正确完成,而您必须编写(和读取)的代码将更加复杂.

  • 在宏(而不是内联)中断言的主要好处是__FILE__和__LINE__是正确的.由于你有一个核心,你可以得到整个堆栈,所以对你来说没什么大不了的.如果可以在没有宏的情况下编写,则在没有宏的情况下执行.如果只能用宏来完成并获得好处,那就去做吧.对我来说,好处需要更简单的代码或更少错误的代码. (2认同)

Ken*_*ner 1

部分好处是代码复制而无需最终维护成本 - 也就是说,您不必在其他地方复制代码,而是从中创建一个宏,并且只需编辑一次......

当然,您也可以只创建一个要调用的方法,但这需要更多的工作......我自己反对大量使用宏,只是试图提出一个潜在的理由。