Nim argv等效

时间:2019-04-12 06:58:55

标签: arguments nim

我正在将C实用程序与Nim连接。 C util main函数需要 argc argv 。我可以从paramCount获取argc,但如何获取argv的C兼容args列表?

int main (int argc, char **argv);
proc main*(argc: cint; argv: cstringArray): cint

2 个答案:

答案 0 :(得分:2)

您的字符串序列变量:

var data: seq[string] = @["A", "B", "C", "D"]

然后在将其发送到C函数之前对其进行分配:

var cdata: cstringArray = data.allocCStringArray()
main(5, cdata)
cdata.deallocCStringArray()

答案 1 :(得分:1)

除了paramCount()外,还有函数paramStr() 实际上得到参数字符串。

如果您的C程序是:

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 **调用:

{.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将给出:

0: def
1: ghi

(使用compile编译指示,您无需从C文件中创建共享库,也不必为此链接一个共享对象,但是当然也可以)