【发布时间】:2023-04-10 16:41:01
【问题描述】:
我觉得,每次我阅读 C 或 C++ 程序时,其中一半或更多只是宏。我知道宏可能很酷,但它们很难跟踪、调试等。更不用说大多数编程语言甚至没有定义宏之类的东西(尽管 Perl6 会有类似的东西)。
我个人总是找到一种不使用宏来编写代码的方法,无论是使用模板、多重继承等。我什至觉得我不是一个好的程序员,因为所有专业人士都使用宏,我尽量避免尽我所能。
问题是,有没有没有宏无法解决的问题?宏最终是好还是坏的做法?我什么时候应该考虑使用宏?
【问题讨论】:
-
好吧,你不能在 C 中使用模板,所以这是一个原因。
-
如果您觉得“所有专业人士都使用宏”,您阅读了哪些代码?我所知道的所有理智的 C++ 代码都非常努力地避免它们。在 C 中,它有点不同,因为你没有很多选择。顺便说一句,为什么这会被标记为 C?您的问题听起来非常具体到 C++,提到了模板和继承。你知道,C 和 C++ 是不同的语言。
-
正如@jalf 所说的那样——它们可能有一些相似之处,但在代码生成方面,它们完全不同。例如,X-macro/table generation idiom
-
是的,很抱歉混用了它们。但是我不得不说,在这两种语言中,我都看到两种语言的代码都非常依赖宏,以至于无法阅读或遵循代码。
-
大量自称为 C++ 程序员的人实际上只是在类框架中编写 C。他们不知道 C++ 有一个独特的设计习惯,所以他们的代码充满了数组、printf 和宏。顺便说一句,他们通常将两种语言称为共轭:“C/C++”。