首页
学习
活动
专区
圈层
工具
发布

Nim等效
EN

Stack Overflow用户
提问于 2019-04-12 06:58:55
回答 2查看 1.3K关注 0票数 1

我要把C工具和尼姆连接起来。C main函数需要、argc、argv。我可以从paramCount获得argc,但是如何为argv获得一个C兼容的args列表?

代码语言:javascript
复制
int main (int argc, char **argv);
代码语言:javascript
复制
proc main*(argc: cint; argv: cstringArray): cint
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-13 14:39:56

除了paramCount()之外,还有函数paramStr(),它实际上获取参数字符串。

如果您的C程序是:

代码语言:javascript
复制
int cmain(int argc, char **argv)
{ 
  int x;
  for (x=0; x < argc; x++)
    printf("%d: %s\n", x, argv[x]);
}

然后,您的Nim程序test.nim需要将重复paramStr()调用返回的值转换为兼容的char **

代码语言:javascript
复制
{.compile: "cmain.c".}
proc cmain(c: cint, a: cstringArray): cint {.importc.}

import os

var nargv =  newSeq[string](paramCount())
var x = 0
while x < paramCount():
   nargv[x] = paramStr(x+1)  # first is program name
   x += 1

var argv: cStringArray = nargv.allocCStringArray()
discard cmain(cint(paramCount()), argv)
argv.deallocCStringArray()

然后运行nim c -r test.nim def ghi会给出:

代码语言:javascript
复制
0: def
1: ghi

(使用compile实用程序,您不需要从C文件中创建一个共享对象,并根据它进行链接,当然,这也是可能的)

票数 5
EN

Stack Overflow用户

发布于 2019-04-12 09:32:37

您有字符串变量的seq:

代码语言:javascript
复制
var data: seq[string] = @["A", "B", "C", "D"]

在将它发送到C函数之前分配它:

代码语言:javascript
复制
var cdata: cstringArray = data.allocCStringArray()
main(5, cdata)
cdata.deallocCStringArray()
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55646129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档