)
这是我的情况我正在研究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个宏像这样不同的类型和维度,每个都在代码处理器中调用次数,这种使用宏的方式会导致一些"代码膨胀"还是以某种方式放慢我的程序?
答案 0 :(得分:3)
我们有一些预定义的例程
使用函数封装它们。
如果内存分配失败,它将写入错误消息并退出当前代码块。
你为此抛出一个例外。此外,您不应该在大多数时间手动分配内存。
当然,必须正确调用宏
这使得它们不安全。
但这里的一个优点是我不必传递“TheConsole”的指针
考虑到C ++用于共享状态的原语,这几乎不是一个优势。
答案 1 :(得分:1)
除了使调试变得困难和编码混乱之外,我无法理解为这些任务使用宏的理由,特别是如果有这样的144个。
编辑:在阅读OP的评论后,我相信他对宏有一些误解。
宏只是代码的缩写。例如,WYSIWYG
是What You See Is What You Get
的缩写。现在,当您将其定义为宏时,您只需键入WYSIWYG
而不是What You See Is What You Get
。这节省了大量的打字,是的,但使用函数是一个更好的选择。
当编译器看到一个宏时,它只是用完整的形式替换你的缩写;类似于Find and Replace
。显然,对软件的性能没有任何影响,而是增加了编译时间。