Importc 编译指示

importc 编译指示提供了一种从 C 语言导入程序或变量的方法。可选参数是一个包含 C 标识符的字符串。如果没有这个参数,C 名称就和 Nim 的标识符 一字不差:

  1. proc printf(formatstr: cstring) {.header: "<stdio.h>", importc: "printf", varargs.}

当 importc 应用于 let 语句时不需要提供值,因为这时期望从 C 取得值。这个用法能够导入 C const:

  1. {.emit: "const int cconst = 42;".}
  2. let cconst {.importc, nodecl.}: cint
  3. assert cconst == 42

注意,这个编译指示曾在 JS 后端滥用,用来导入 JS 对象和函数。其他后端也支持这个编译指示,功能相同。另外,当目标语言不是 C 时,还有其他的编译指示:

传递给 importc 的字符串字面量可以是一个格式化字符串:

  1. proc p(s: cstring) {.importc: "prefix$1".}

在示例中, p 的外部名称被设置为 prefixp 。只有 $1 可用,并且必须将字面美元符号写为 $$ 。