我想使用在main函数中调用的预定义函数。这个预定义的函数从收到的数据包中获取一些值,比如说我希望在main函数中使用的接收器的时间戳。但是问题是这个预定义的函数是void类型的,不能返回任何东西。我正在考虑使用全局变量的概念,因为在这种情况下局部变量会失败。有人可以举一个例子来实现这个东西吗?
答案 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 *);
并通过参数返回相应的数据(通过引用传递)。