2011-07-23 13 views
1

main関数で呼び出される定義済みの関数を使いたいと思います。この事前定義された関数は、受信したパケットからいくつかの値を取得し、main関数で使用したい受信機からのタイムスタンプを言うことができます。しかし、この事前定義された関数はvoid型であり、何も返すことができないという問題があります。この場合、ローカル変数が失敗するため、グローバル変数の概念を使用することを考えています。誰かがこの事を実装するための例を挙げてもいいですか?void関数から値を取得する方法は?

+0

あなたはCかC++ですか? – Puppy

+0

多分私は何かを理解していないかもしれませんが、関数を変更してグローバル変数に結果を入れることができれば、それを変更してあなたが望むものを返すのはなぜですか? –

+0

したがって、関数はソースコードで定義され、自分のCファイルでは定義されません。ソースコードはcontiki OSのものです。この関数は他の場所でも使用できるので、そのまま残しておきたいと思います。しかし、グローバル変数を内部に格納してそこに格納するだけであれば、自分のCファイルに行くのが良いと思います。 – Acid

答えて

4

関数が事前定義されている場合は、結果を返すための事前定義済みの方法が既に存在する必要があります。

void関数が結果を返す1つの方法は、そのパラメータの1つがポインタである場合です。次に、そのポインタが指すオブジェクトに結果を格納できます。

3

利用などの機能:

void f(int *a) 
{ 
    *a = 5; 
} 

それは変更されますが、voidを返します。

C++、それはリファレンスを使用することをお勧めします使用している場合:あなたは、いくつかの一般的なコールバックをしたい場合は

void f(int &a) 
{ 
    a = 5; 
} 
0

することは、あなたは、例えば使用することができますこのプロトタイプ:

void (*callback)(void *); 

適切なデータを参照渡しとして返します。

2

グローバル変数を使用しないようにする必要があります。スレッドの安全性を高めるために余分な努力を払う必要があります。また、コードを難しくしたり、バグなどを導入しやすくします。 )。

ポインタを使用するか、戻り値を変更することができます(いずれにしても、関数プロトタイプを変更する必要があります)。もう1つの解決策は、 "怒っている"もの(変更しようとしているもの)を呼び出してそこで結果を処理し、オリジナルの関数を元の関数に続けて関数a()が返すようにする関数を定義することですあなたがグローバルの使用方法を求める場合は何が必要、しかし

1

(1はvoidを返す)内のB()を呼び出します。


int gGlobalValue; 

void funcion() 
{ 
    int returnValue = 1; // Or whatever 
    gGlobalValue = returnValue; 
} 

これは、非保守し、あなたが望むものをやっての貧弱な方法ですしかし、ここはそれです。

+0

これは私のために働いていない...いつもランダムな値を返すのではなく、常に41の値を表示する...ここで私が使用しているコードは int T、T1; 空き時間() { \t T = rand(); } void main() { time(); \t T1 = T; \t printf( "%d"、T1); } – Acid

+0

あなたの乱数は播種していません。あなたはそれが "ランダムな"値を返す前にそれを播種しなければなりません。 –

+0

だから、rand関数を忘れることができますが、コンセプトは正しいですし、私の問題は正しく解決されますか? – Acid

関連する問題