使用cpp宏作为脚本语言是件坏事吗?

时间:2014-05-30 14:04:02

标签: c++ macros performance

这是我的情况我正在研究Cpp / Qt项目,我们有一些预定义的例程来分配数组内存

ex:
alloc2(n1, n2, s) return a pointer to a 2d (n1*n2) array of elements of size "s"

如果分配失败,它将返回NULL

我编写了一些宏来轻松调用这些例程,如果内存分配失败,它会写一条错误消息并退出当前的代码块。

#define ALLOC2(p, n1, n2, size)   if(NULL == (p=alloc2((n1), (n2), (size)))){   \
                                    TheConsole->Message(QString("ERROR MSG"));  \
                                    return false;                               \
                                  }

当然,必须正确调用宏,并且n1,n2必须只是int类型

但其中一个优点是我不必传递指针" TheConsole"因为宏可以作为"脚本"语言;它将盲目地取代" ALLOC2(p,n1,n2,size)"根据其定义。

我的问题是: 我有144个宏像这样不同的类型和维度,每个都在代码处理器中调用次数,这种使用宏的方式会导致一些"代码膨胀"还是以某种方式放慢我的程序?

2 个答案:

答案 0 :(得分:3)

  

我们有一些预定义的例程

使用函数封装它们。

  

如果内存分配失败,它将写入错误消息并退出当前代码块。

你为此抛出一个例外。此外,您不应该在大多数时间手动分配内存。

  

当然,必须正确调用宏

这使得它们不安全。

  

但这里的一个优点是我不必传递“TheConsole”的指针

考虑到C ++用于共享状态的原语,这几乎不是一个优势。

答案 1 :(得分:1)

除了使调试变得困难和编码混乱之外,我无法理解为这些任务使用宏的理由,特别是如果有这样的144个。

编辑:在阅读OP的评论后,我相信他对宏有一些误解。 宏只是代码的缩写。例如,WYSIWYGWhat You See Is What You Get的缩写。现在,当您将其定义为宏时,您只需键入WYSIWYG而不是What You See Is What You Get。这节省了大量的打字,是的,但使用函数是一个更好的选择。

当编译器看到一个宏时,它只是用完整的形式替换你的缩写;类似于Find and Replace。显然,对软件的性能没有任何影响,而是增加了编译时间