テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

(nim report) Cの構造体のマップ方法(char *, char **)

NimからCにデータを渡すときに, Cの構造をNim上で表現することになる.

典型的なものは, 整数型, 文字列, 文字列の配列(例: argv)

文字列と文字列の配列については, cstringとcstringArrayを使うらしい.

わかりやすい例としては, posix.Hostentがある.

Hostent = object 
  h_name*: cstring            ## Official name of the host.
  h_aliases*: cstringArray    ## A pointer to an array of pointers to
                              ## alternative host names, terminated by a
                              ## null pointer.
  h_addrtype*: cint           ## Address type.
  h_length*: cint             ## The length, in bytes, of the address.
  h_addr_list*: cstringArray  ## A pointer to an array of pointers to network
                              ## addresses (in network byte order) for the
                              ## host, terminated by a null pointer.
struct  hostent {
    char   *h_name;    /* official name of host */
    char   **h_aliases;    /* alias list */
    int    h_addrtype; /* host address type */
    int    h_length;   /* length of address */
    char   **h_addr_list;  /* list of addresses from name server */
#define    h_addr  h_addr_list[0] /* address, for backward compatibility */
};