gpt4 book ai didi

c - C 中 3D 循环的宏

转载 作者:太空宇宙 更新时间:2023-11-03 23:49:12 25 4
gpt4 key购买 nike

我正在开发一个 C (C99) 程序,它在许多地方对 3-D 数组进行大量循环。所以很自然地,以下访问模式在代码中无处不在:

for (int i=0; i<i_size, i++) {
for (int j=0; j<j_size, j++) {
for (int k=0; k<k_size, k++) {
...
}
}
}

自然地,这会使许多代码行变得困惑并且需要大量的复制粘贴。所以我想知道使用宏来使其更紧凑是否有意义,如下所示:

#define BEGIN_LOOP_3D(i,j,k,i_size,j_size,k_size) \
for (int i=0; i<(i_size), i++) { \
for (int j=0; j<(j_size), j++) { \
for (int k=0; k<(k_size), k++) {

#define END_LOOP_3D }}}

一方面,来自 DRY principle从观点来看,这似乎很棒:它使代码更加紧凑,并允许您将循环的内容缩进一个 block 而不是三个。另一方面,引入新语言结构的做法看起来丑陋得可怕,尽管我现在想不出任何明显的问题,但似乎很容易产生错误,调试起来简直是噩梦。

那么您怎么看:尽管存在丑陋和潜在的缺点,但紧凑性和减少的重复是否证明了这一点?

最佳答案

切勿将打开或关闭 {} 放在宏中。 C 程序员不习惯这一点,因此代码变得难以阅读。

在您的情况下,这甚至是完全多余的,您只是不需要它们。 如果你这样做

FOR3D(I, J, K, ISIZE, JSIZE, KSIZE)      \
for (size_t I=0; I<ISIIZE, I++) \
for (size_t J=0; J<JSIZE, J++) \
for (size_t K=0; K<KSIZE, K++)

不需要终止宏。程序员可以直接放置 {}

另外,上面我使用了 size_t 作为 C 中 for 循环索引的正确类型。 3D 矩阵很容易变大,int 运算溢出。

关于c - C 中 3D 循环的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25131574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com