如何从void函数中获取价值?

时间:2011-07-23 15:50:22

标签: c++ c

我想使用在main函数中调用的预定义函数。这个预定义的函数从收到的数据包中获取一些值,比如说我希望在main函数中使用的接收器的时间戳。但是问题是这个预定义的函数是void类型的,不能返回任何东西。我正在考虑使用全局变量的概念,因为在这种情况下局部变量会失败。有人可以举一个例子来实现这个东西吗?

5 个答案:

答案 0 :(得分:4)

如果函数是预定义的,它必须已经有一种预定义的返回结果的方法。

void函数返回结果的一种可能方法是,如果其中一个参数是指针。然后它可以将结果放在该指针指向的对象中。

答案 1 :(得分:3)

使用此类功能:

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

它会修改a,但会返回void。

如果使用c ++,最好使用引用:

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

答案 2 :(得分:2)

你应该尽量避免使用全局变量,因为你必须付出额外的努力才能使它们成为线程安全的,而且它们也是一种不好的做法(使代码难以理解,容易引入bug等)

您可以使用指针或更改返回值(无论哪种方式,您都必须更改函数原型)。另一个解决方案是定义另一个调用“冒犯”的函数(你试图改变的函数)并在那里处理结果,然后继续使用原始参数的原始函数,这样你的函数a()将返回无论你需要什么,但在里面调用b()(返回void的那个)

答案 3 :(得分:1)

如果您要求如何使用全局:


int gGlobalValue;

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

这是一种不可维护,做得不好的方式,但现在就是这样。

答案 4 :(得分:0)

如果您想要一些通用回调,可以使用例如这个原型:

void (*callback)(void *);

并通过参数返回相应的数据(通过引用传递)。