将 C 移植到 Go,在 if 检查中修改变量
Porting C to Go that modifies a variable in an if check
我正在尝试将以下 C 代码移植到 Go:
if (x == 0 || x-- == 0) {
// Stuff
}
这在 Go 中是不合法的,因为我不能在检查子句中修改 x
。
在 Go 中表示这个的好方法是什么?复制块的内容?
如果 x--
是一个拼写错误,应该是 --x
,那么我将对 x
进行明确的更改:
if x == 0 || x == 1 {
x = 0
// Stuff
} else {
x--
}
否则,您的 C 代码有错误。如果 x == 0
为假,则 x-- == 0
也将为假,因为您使用的是 post 递增运算符。因此,代码相当于:
if (x == 0) {
// Stuff
} else {
x--;
}
围棋代码
if x != 0 {
x--
} else {
// Stuff
}
相当于C代码
if (x == 0 || x-- == 0) {
// Stuff
}
例如,在围棋中,
package main
import (
"fmt"
)
func main() {
for _, x := range []int{-42, -2, -1, 0, 1, 2, 42} {
fmt.Printf("x %d:", x)
if x != 0 {
x--
} else {
fmt.Printf(" Stuff %d:", x)
}
fmt.Printf(" x %d:\n", x)
}
}
输出:
x -42: x -43:
x -2: x -3:
x -1: x -2:
x 0: Stuff 0: x 0:
x 1: x 0:
x 2: x 1:
x 42: x 41:
例如,在 C 中,
#include <stdio.h>
int main() {
int a[] = {-42,-2,-1,0,1,2,42};
for (int i = 0; i < (sizeof a)/sizeof a[0]; i++) {
int x = a[i];
printf("x %d:", x);
if (x == 0 || x-- == 0) {
printf(" Stuff %d:", x);
}
printf(" x %d:\n", x);
}
}
输出:
x -42: x -43:
x -2: x -3:
x -1: x -2:
x 0: Stuff 0: x 0:
x 1: x 0:
x 2: x 1:
x 42: x 41:
我正在尝试将以下 C 代码移植到 Go:
if (x == 0 || x-- == 0) {
// Stuff
}
这在 Go 中是不合法的,因为我不能在检查子句中修改 x
。
在 Go 中表示这个的好方法是什么?复制块的内容?
如果 x--
是一个拼写错误,应该是 --x
,那么我将对 x
进行明确的更改:
if x == 0 || x == 1 {
x = 0
// Stuff
} else {
x--
}
否则,您的 C 代码有错误。如果 x == 0
为假,则 x-- == 0
也将为假,因为您使用的是 post 递增运算符。因此,代码相当于:
if (x == 0) {
// Stuff
} else {
x--;
}
围棋代码
if x != 0 {
x--
} else {
// Stuff
}
相当于C代码
if (x == 0 || x-- == 0) {
// Stuff
}
例如,在围棋中,
package main
import (
"fmt"
)
func main() {
for _, x := range []int{-42, -2, -1, 0, 1, 2, 42} {
fmt.Printf("x %d:", x)
if x != 0 {
x--
} else {
fmt.Printf(" Stuff %d:", x)
}
fmt.Printf(" x %d:\n", x)
}
}
输出:
x -42: x -43:
x -2: x -3:
x -1: x -2:
x 0: Stuff 0: x 0:
x 1: x 0:
x 2: x 1:
x 42: x 41:
例如,在 C 中,
#include <stdio.h>
int main() {
int a[] = {-42,-2,-1,0,1,2,42};
for (int i = 0; i < (sizeof a)/sizeof a[0]; i++) {
int x = a[i];
printf("x %d:", x);
if (x == 0 || x-- == 0) {
printf(" Stuff %d:", x);
}
printf(" x %d:\n", x);
}
}
输出:
x -42: x -43:
x -2: x -3:
x -1: x -2:
x 0: Stuff 0: x 0:
x 1: x 0:
x 2: x 1:
x 42: x 41: