c2go
c2go copied to clipboard
Multiple For Loop Variables
For this C code:
#include <stdio.h>
#include "math.h"
typedef __int32_t int32;
int32 sampleFunc(int32 input)
{
return input * 2;
}
int32 sampleAction()
{
int32 i, t, dt, dummy;
dummy = 0;
dt = 12;
for (i = 0, t = 0; i <= 2; i += 1, t += dt)
{
dummy += i * t;
}
return dummy;
}
int main()
{
printf("Hello World\n");
return 0;
}
Skipping ceremonial parts, we get:
func sampleAction() int32 {
var i int32
var t int32
var dt int32
var dummy int32
dummy = int32(0)
dt = int32(12)
for i = int32(0) , (t = int32(0)); i <= 2; i += 1 , (t += dt) { // syntax error
dummy += i*t
}
return dummy
}
While equivalent, working Go code is:
func sampleAction() int32 {
var i int32
var t int32
var dt int32
var dummy int32
dummy = int32(0)
dt = int32(12)
for i, t = int32(0), int32(0); i <= 2; i, t = i+1, t+dt { // correct syntax
dummy += i * t
}
return dummy
}
Thanks for pointing this out - it is a bug. Feel like putting in a PR for it?
I'm not sure if I'm any good with Programming Languages things (ASTs, Lexers, Parsers), just the concepts. Maybe that's why I've played with languages as much as I could!
Thank for snippet . I will try to solve in this week.
Present version:
type int32 int // <<--- HERE NAME IS NOT LIKE IN C
func sampleFunc(input int) int { // <<-- OUTPUT TYPE IS NOT int32
return input * int((int((2))))
}
func sampleAction() int { // <<-- OUTPUT TYPE IS NOT int32
var i int // <<--TYPE IS NOT int32
var t int // <<--TYPE IS NOT int32
var dt int // <<--TYPE IS NOT int32
var dummy int // <<--TYPE IS NOT int32
dummy = int((int((0)))) // <<-- STRANGE TYPE CONVERTION
dt = int((int((12))))// <<-- STRANGE TYPE CONVERTION
for {
break
}
{
i = int((int((0))))
t = int((int((0))))
for t = int((int((0)))); i <= 2; {
dummy += i*t
i += 1
t += dt
}
}
return dummy
}
func main() {
__init()
noarch.Printf([]byte("Hello World\n\x00"))
return
}