标签: void

为什么将 free 的返回值转换为 void?

我正在阅读一本使用 C的书(Butenhof 的POSIX 线程编程,1997 年),我遇到了以下行:

(void)free(data);
Run Code Online (Sandbox Code Playgroud)

这里,data只是一个指向已分配结构的指针,

data = malloc(sizeof(my_struct_t));
Run Code Online (Sandbox Code Playgroud)

为什么是free被强制转换的结果void

根据我对 C 的理解,这似乎没有意义,原因有两个:

  • free 函数已经返回 void
  • 代码没有使用返回值(它甚至没有被分配给一个变量)

这本书写于 1997 年。这是某种遗产吗?

作者提到这些示例是在 Digital Unix 4.0d 上运行的,但如果您不打算使用该结果,我仍然无法想象有理由强制转换该函数的结果。

c free casting legacy-code void

84
推荐指数
3
解决办法
7053
查看次数

为什么这个Java 8 lambda无法编译?

以下Java代码无法编译:

@FunctionalInterface
private interface BiConsumer<A, B> {
    void accept(A a, B b);
}

private static void takeBiConsumer(BiConsumer<String, String> bc) { }

public static void main(String[] args) {
    takeBiConsumer((String s1, String s2) -> new String("hi")); // OK
    takeBiConsumer((String s1, String s2) -> "hi"); // Error
}
Run Code Online (Sandbox Code Playgroud)

编译器报告:

Error:(31, 58) java: incompatible types: bad return type in lambda expression
    java.lang.String cannot be converted to void
Run Code Online (Sandbox Code Playgroud)

奇怪的是标记为"OK"的行编译得很好,但标记为"Error"的行失败了.他们看起来基本相同.

java lambda compiler-errors void java-8

83
推荐指数
4
解决办法
2万
查看次数

在void方法中使用return是不好的做法吗?

想象一下以下代码:

void DoThis()
{
    if (!isValid) return;

    DoThat();
}

void DoThat() {
    Console.WriteLine("DoThat()");
}
Run Code Online (Sandbox Code Playgroud)

在void方法中使用return是否可以?它有任何性能损失吗?或者写一个这样的代码会更好:

void DoThis()
{
    if (isValid)
    {
        DoThat();
    }
}
Run Code Online (Sandbox Code Playgroud)

c# return void

81
推荐指数
6
解决办法
6万
查看次数

Java泛型void/Void类型

我正在ResponseHandler为apache HttpClient包实现一个,如下所示:

new ResponseHandler<int>() {
    public int handleResponse(...) {
        // ... code ...
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

但我希望handleResponse函数不返回任何东西,即void.这可能吗?以下内容无法编译,因为void它不是有效的Java类型:

new ResponseHandler<void>() {
        public void handleResponse(...) {
            // ... code ...
        }
}
Run Code Online (Sandbox Code Playgroud)

我想我可以代替voidVoid返回一个Void对象,但是这并不是我真正想要的东西.:是否有可能组织这次回调的情况以这样的方式,我可以返回voidhandleResponse

java return-type void

69
推荐指数
3
解决办法
4万
查看次数

EasyMock:无效方法

我有一个方法在类中返回void,该类是我想要测试的类的依赖项.

这个类非常庞大,我只使用这个单一的方法.我需要替换此方法的实现以进行测试,因为我希望它能够执行不同的操作,并且我需要能够访问此方法接收的参数.

我无法在EasyMock中找到这样做的方法.我想我知道如何通过使用Mockito来做到这一点,doAnswer但除非绝对必要,否则我不想添加另一个库.

java unit-testing easymock mocking void

68
推荐指数
3
解决办法
10万
查看次数

在现代C和C++中不推荐使用f(void)

我目前正在重构/整理C++项目中使用的一些旧C代码,并定期查看以下函数:

int f(void)
Run Code Online (Sandbox Code Playgroud)

我倾向于写作:

int f()
Run Code Online (Sandbox Code Playgroud)

是否有任何理由不在整个代码库中用()替换(void)以提高一致性,或者两者之间是否存在我不知道的细微差别?更具体地说,如果C++中的虚拟成员函数被描述为:

virtual int f(void)
Run Code Online (Sandbox Code Playgroud)

派生类包括成员函数:

int f()
Run Code Online (Sandbox Code Playgroud)

这是一个有效的覆盖?另外,基于几乎相同的签名,我是否可能遇到任何链接器问题?

c c++ refactoring void

67
推荐指数
3
解决办法
1万
查看次数

Python void返回类型注释

在python 3.x中,通常使用函数的返回类型注释,例如:

def foo() -> str:
    return "bar"
Run Code Online (Sandbox Code Playgroud)

"void"类型的正确注释是什么?

我正在考虑3种选择:

  1. def foo() -> None:
    • 不合逻辑的IMO,因为None不是一个类型,
  2. def foo() -> type(None):
    • 使用我所知道的最佳语法来获取NoneType,
  3. def foo():
    • 省略显式返回类型信息.

选项2.对我来说似乎最合乎逻辑,但我已经看到了一些1的实例.

python annotations void type-hinting

65
推荐指数
2
解决办法
2万
查看次数

return关键字在Java中的void方法中做了什么?

我正在寻找一个路径查找教程,我注意到方法return内部的一个语句void(类PathTest,第126行):

if ((x < 0) || (y < 0) || (x >= map.getWidthInTiles()) || (y >= map.getHeightInTiles())) {
    return;
}
Run Code Online (Sandbox Code Playgroud)

我是Java的新手.谁能告诉我它为什么存在?据我所知,return不允许在void方法中使用.

java methods return void

63
推荐指数
5
解决办法
16万
查看次数

如何模拟使用PowerMock返回void的静态方法?

我的项目中有一些静态的util方法,其中一些只是传递或抛出异常.关于如何模拟具有除void之外的返回类型的静态方法,有很多例子.但是我如何模拟一个将void返回到" doNothing()" 的静态方法?

非void版本使用以下代码行:

@PrepareForTest(StaticResource.class)
Run Code Online (Sandbox Code Playgroud)

...

PowerMockito.mockStatic(StaticResource.class);
Run Code Online (Sandbox Code Playgroud)

...

Mockito.when(StaticResource.getResource("string")).thenReturn("string");
Run Code Online (Sandbox Code Playgroud)

但是,如果应用于StaticResources返回void,编译将抱怨when(T)不适用于void ...

有任何想法吗?

一个解决方法可能是让所有静态方法返回一些Boolean成功,但我不喜欢变通方法.

static mocking void mockito powermock

61
推荐指数
4
解决办法
9万
查看次数

从void函数返回

从函数返回更正确的方法是:

void function() {
  // blah some code
}
Run Code Online (Sandbox Code Playgroud)

要么

void function() {
  // blah some code
  return;
}
Run Code Online (Sandbox Code Playgroud)

第二种方式的理由:

  1. 它更清楚地表达了开发者的意图.
  2. 它有助于在预编译时检测函数结束:

假设你有这样的场景 - 你有很多函数,你必须在这些函数的末尾注入一些代码.但由于某些原因,您不希望/或无法修改如此大量的功能.你能做些什么?Returnmacro发挥作用,例如:

#include<stdio.h>

#define MAX_LINES 1000
#define XCAT(a,b) a##b
#define CAT(a,b) XCAT(a,b)
#define return returns[__LINE__] = 1;\
        if (returns[__LINE__])\
           {printf("End of function on %d line.\n",__LINE__);}\
        int CAT(tmp,__LINE__); \
        if ((CAT(tmp,__LINE__)=returns[__LINE__], returns[__LINE__] = 0, CAT(tmp,__LINE__)))\
              return

static int returns[MAX_LINES];


void function1(void) {
    return;
}

void function2(void) {
    return;
}

int main()
{
    function1();
    function2(); …
Run Code Online (Sandbox Code Playgroud)

c function void

60
推荐指数
3
解决办法
13万
查看次数