【发布时间】:2009-07-06 18:49:51
【问题描述】:
重要提示:请参阅这个非常相关的问题:Return multiple values in C++。
我在寻找如何在 ANSI C 中做同样的事情?你会使用结构体还是传递函数中参数的地址?我追求极其高效(快速)的代码(时间和空间),即使以可读性为代价。
编辑:感谢所有答案。好吧,我想我应该解释一下:我正在写这本书,内容是针对特定领域的某个算法子集。我为自己设定了一个相当武断的目标,即为我所有的算法在网络上提供最有效的(时间和空间)实现,但以牺牲可读性和其他东西为代价。这部分是我(一般)问题的性质。
答案:我希望我能直截了当,从(可能)最快到更符合常识(所有这些都是先验的,即未经测试):
- 将 outvalues 存储在全局对象中(我会假设类似 outvals[2]?),或者
- 将输出值作为参数传递给函数 (foo(int in, int *out1, int *out2)),或者
- 返回一个包含两个值的结构,或者
- (3) 仅当值在语义上相关时。
这有意义吗?如果是这样,我认为 Jason 的回应是最接近的,尽管它们都提供了一些“谜题”。罗伯特的很好,但此时语义不是我所追求的(尽管他的建议得到了适当的注意)
谢谢大家。
【问题讨论】:
-
无情地编写您的代码和配置文件。我想您会发现 struct-vs-reference 的性能影响与您的其他实现相比如此微不足道,甚至不值得考虑。
-
这也是个好建议。谢谢。 (顺便说一句,我确实对你投了赞成票,碰巧我正在寻求一个更实际的答案,仅此而已。)
-
在 C 中,使用“foo(int in, int &out1, int &out2)”的“答案 2”表示法没有意义 - 引用是在 C++ 中,而不是 C。
-
通常,一本书会受益于将清晰度作为首要目标,将空间和时间表现作为次要目标。你如何处理空间和时间之间的紧张关系——最节省空间的算法往往不是最节省时间的?如果你已经有两种算法,为什么不也提出一个清晰、简单、可靠的算法呢? (对 3 个选择的一个答案是因为选择太多。)
-
@Jonathan。评论 1) 已修复,谢谢。评论 2) 我并不是要粗鲁,但我并不是真的在寻求关于如何写论文或书籍的建议。没有写过长篇专着的人给出的建议通常倾向于“写你自己的小说”书籍给出的建议:“了解你的听众,保持清醒,晚上坐下来阅读”。 . 对于某些人来说,这些只是空洞的老生常谈。
标签: c data-structures