2016-11-23 4 views
-1

RustでC定数を使用しようとしています。RustでC定数にアクセスするにはどうすればよいですか?

return C.INT_CANCEL 

がどのように私は錆で似たような操作を行います。

#define INT_CANCEL 2 

行くには、私はこのような何かを行うことができます。ここではCコードの部分はありますか?

私は

#[link(name = "name_of_lib")] 
extern { 
    int INT_CANCEL 
} 

のようなものを試してみたしかし、それはコンパイルされません。

+7

これは定数ではなく、プリプロセッサマクロです。 Cに_enum-constants_以外の記号定数はありません。 – Olaf

答えて

4

私はゴーファーですが、ゴーは、C #defineも理解できません。代わりに、cgo does(少なくともsome subsets of them)。

最も簡単なオプションは、値をプログラムにコピーすることです。あなたのサイズを定義する必要がことに注意してください:

const INT_CANCEL: u8 = 2; 

あなたが本当に実行時に決定されるタイプのを待つことができるように必要な場合にも、マクロを作成することもできますが、それは一般的ではありません。

またa build scriptヘッダが含まれており、適切な錆コードを出力compiles some C codeことを作成することができます。

#include <stdio.h> 
#include "myheader.h" 

int main(int argc, char *argv[]) { 
    printf("const INT_CANCEL: u8 = %d;\n", INT_CANCEL); 

    return 0; 
} 

錆のコードが戻ってあなたのプロジェクトに含めることができます。


また、そのためにはCGOに似た何かをすると、自動的にこれらの定数を作成しようとrust-bindgenを変更しようとするかもしれません。

+0

ありがとうございました。 「最も簡単で簡単な選択肢は、その価値をプログラムにコピーすることです。」それは私が思っていたことです、私は何かが欠けていないことを確認したいと思っていました。 –

関連する問題