C/ c++程序设计中的一个问题
A problem in C/C++ programming
我有两个不同条件的循环,但循环中的代码是相同的。
:
for (xx; xxxx; xxx)
{
the Code
}
for (yy; yyyy; yyy)
{
the Code
}
问题是代码太长,我想只写一次代码,并执行这两个不同的循环。
我怎么解决它?
也许你应该把长代码块在一个函数/方法和调用函数/方法在两个循环?
type blockOfCode() {
block of code...
return type; //Or if it's is void nothing obviously.
}
for (xx, xxx, xxxx)
blockOfCode();
for (yy, yyy, yyyy)
blockOfCode();
为什么不把它变成一个函数呢?这样你就有了一份代码副本,你所做的任何更改/bug修复都会在两个地方反映出来。
内联函数会使它更短,但就对icache的影响而言,它仍然会和你的代码一样长
一种解决方案是将代码放入(n内联)函数中,使其更短:
inline function a() { /* stuff */ }
for (x; xx; xxx) a();
for (y; yy; yyy) a();
您需要重构代码以将公共代码(在for循环中)移动到一个函数
为了完整起见,只有当你完全确定你不能使用一个函数时,才会有一个糟糕的(强调糟糕的!)回退;(有理由)可怕的宏:
#define TheCode(p1)
do {
line1...;
line2...maybe using p1...;
line3...;
} while (0)
for (xx; xxxx; xxx)
{
TheCode(x);
}
for (yy; yyyy; yyy)
{
TheCode(y);
}
这绝对不是推荐的解决方案;使用函数更好。但作为一种绝望之举,它可能会解决一些问题。总的来说,如果你不能使用一个函数,那么你现有的代码就有问题了,你应该在把它作为替代之前解决这些问题。
把the Code
放在一个函数中,你会从每个循环内部调用吗?这对你有用吗?
如果不知道两个for
语句的条件是什么,或者不知道循环中条件的差异是如何出现的,那么很难确切地知道这里需要什么。而且,我肯定更愿意将它重构成另一个函数,而不是做一些hack的事情来让它工作,因为如果事情那么复杂,它很可能会有更多的问题,而不仅仅是重复。
for
条件的性质对它进行一些变化):
改变:
原始代码// ... some code
for (int i=0; i < 5; ++i)
{
// loop code loop code loop code
// loop code loop code loop code
// loop code loop code loop code
// loop code loop code loop code
// loop code loop code loop code
}
// ... more code
for (int j=11; j < 20; ++j)
{
// loop code loop code loop code
// loop code loop code loop code
// loop code loop code loop code
// loop code loop code loop code
// loop code loop code loop code
}
// ... rest of code
:
修改代码// ... some code
for (int i=0; i < 5; ++i)
{
#include "badforloop.i"
}
// ... more code
for (int i=11; i < 20; ++i)
{
#include "badforloop.i"
}
// ... rest of code
[注意:如果两个循环中的循环变量不是i
,而是不同的变量,您应该修改它们使它们相同。]
新建文件:badforloop.i
// loop code loop code loop code
// loop code loop code loop code
// loop code loop code loop code
// loop code loop code loop code
// loop code loop code loop code
相关文章:
- 在决定是通过参考还是通过价值时,尺寸真的是一个问题吗
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 为什么在分配给成员变量之前获取unique_ptr的返回是一个问题?
- 我在使用 boost::serialization 时遇到了一个问题,我的代码在 Linux 中运行良好,但在 Wind
- 在C++,重复申报仍然是一个问题吗?
- "Memory Fragmentation"这仍然是一个问题?
- 缺少类型说明符和另一个问题
- 在浮点精度成为一个问题之前,可以将多少个浮点值加在一起
- 关于使用C++结构的一个问题
- 关于骰子概率计算的一个C++问题
- 我想知道我将如何实现 + 运算符重载.我已经从我上一个问题中计算出 += 运算符重载
- 组合理论的一个问题
- 我有一个问题,创建了C 中阻塞队列的向量
- CreateFileWindows XP和7中存在一个问题
- 我是编码新手,我面临一个问题
- 在添加新记录和访问记录时有一个问题
- 专用纯虚拟模板函数(未定义引用)的另一个问题
- 在C++中,这个Eigen::张量的声明是安全的,还是有缺陷的?我应该为它提交一个问题吗
- 我如何让我的部分代码循环并重复一个问题,直到答案是有效的输入C++
- 我的程序停止工作,因为检测到一个问题