当前位置: 首页 > 软件库 > 开发工具 > >

c2go

将 C 转译为 Go
授权协议 MIT
开发语言 Google Go
所属分类 开发工具
软件类型 开源软件
地区 不详
投 递 者 雍飞雨
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

c2go是将C转化为Go的工具。

此项目的目标是:

  1. 创建一个通用的工具,可以将C转化为Go
  2. 跨平台
  3. 一个可重用和可预见的工具
  4. 提供快速和小巧的版本

使用示例:

下面例子是将一段 C 代码翻译为 Go 代码

#include <stdio.h>
 
int main()
{
   int n, c;
 
   printf("Enter a number\n");
   scanf("%d", &n);
 
   if ( n == 2 )
      printf("Prime number.\n");
   else
   {
       for ( c = 2 ; c <= n - 1 ; c++ )
       {
           if ( n % c == 0 )
              break;
       }
       if ( c != n )
          printf("Not prime.\n");
       else
          printf("Prime number.\n");
   }
   return 0;
}
c2go transpile prime.c
go run prime.go
Enter a number
23
Prime number.

prime.go 代码如下

package main

import "unsafe"

import "github.com/elliotchance/c2go/noarch"

// ... lots of system types in Go removed for brevity.

var stdin *noarch.File
var stdout *noarch.File
var stderr *noarch.File

func main() {
	__init()
	var n int
	var c int
	noarch.Printf([]byte("Enter a number\n\x00"))
	noarch.Scanf([]byte("%d\x00"), (*[1]int)(unsafe.Pointer(&n))[:])
	if n == 2 {
		noarch.Printf([]byte("Prime number.\n\x00"))
	} else {
		for c = 2; c <= n-1; func() int {
			c += 1
			return c
		}() {
			if n%c == 0 {
				break
			}
		}
		if c != n {
			noarch.Printf([]byte("Not prime.\n\x00"))
		} else {
			noarch.Printf([]byte("Prime number.\n\x00"))
		}
	}
	return
}

func __init() {
	stdin = noarch.Stdin
	stdout = noarch.Stdout
	stderr = noarch.Stderr
}
  • 概述 切片是golang中常用的数据类型,是一段连续的内存. 看一下go源码中的定义: type slice struct { array unsafe.Pointer len int cap int } 这里的array就是底层数组首地址的指针,len和cap都是int,是这个切片的长度和容量. 主要的用法有 s := make([]int,5,10) // 第一种 len 5

 相关资料
  • c2go 是一个将 C 代码转译为 Go 代码的项目。c2go 把整个转换过程分为这样几个步骤: 首先,用 C 语言的预处理程序(preprocessor)解决掉宏和各种预编译指令。 其次,生成的 C 代码再通过 llvm project 中的 clang 命令行进行解析(parser):     clang -Xclang -ast-dump=json -fsyntax-only [C源文件..

  • 问题内容: 有什么工具可以将C代码转换为Java代码?我有兴趣将此代码转换为Java: 问题答案: 您是否考虑过使用JNI来代替从C到Java的转换?

  • 我试图将Python程序转换为C++,因为我对Python的理解稍微好一点。然而,翻译出来的代码并不起作用。有人能帮我一下吗?我试图用C++制作一个数独板,但它在中返回一些值,而不是其他位置。加上它们是无效的,并包含0。 这个程序的输出是一个二维数组,所有值都不在0,并且对数独板有效: 是一个长度为9的二维数组,在每个位置都有9个列出的语句。在这里,它们都被初始化为。 这个程序的输出也是一个二维数

  • 问题内容: 我有一个byte.Buffer,我使用binary.Write()函数包装了数据。然后,我需要将此字节数组发送到C函数。使用Go 1.6时,我未能成功解决这一问题。 它在调用C函数的行上失败: C函数: 我能够使以下内容正常工作,但将字节数组转换为字符串感觉不对。有一个更好的方法吗?这种方法是否会对数据产生副作用? 同样,这需要在Go 1.6(引入了更严格的cgo指针规则)下工作。 谢

  • 问题内容: 我想创建一个包含我的类的实例变量的JSON字符串。 例如, 会成为: 我研究了几个用于创建JSON的C ++库,它们似乎都异常复杂。我想要类似Javascript的东西。换句话说,只需将std :: map传递给它并接收一个字符串。该地图可能包含其他地图,向量,列表,字符串,数字和布尔值。 最好的方法是什么? 谢谢你的帮助。 编辑 我研究了以下内容: json spirit,jsonc

  • 我有一个C#winform应用程序,将文件保存到sqlserver数据库(2014)到VAR二进制(MAX)字段 功能保存 要检索的函数 这工作很好,现在我已经要求将数据库转换为XML,用于未连接到服务器的PC 转换为XML的函数 它工作正常,除了二进制文件,当 输出XML 当尝试将其转换回图像时,它会给我1kb的文件,字符串不是实际图像 二进制字段有特殊的转换吗? 非常感谢。 编辑问题解决感谢@