17

void f()意味着f什么都不返回。如果void什么都不返回,那我们为什么要使用它呢?的主要目的是void什么?

4

11 回答 11

37

发明 C 时的约定是,如果您没有指定返回类型,编译器会自动推断您想要返回一个int(对于参数也是如此)。

但是通常你编写的函数可以做一些事情并且不需要返回任何东西(例如,考虑一个只在屏幕上打印一些东西的函数);出于这个原因,决定,要指定你根本不想返回任何东西,你必须使用void关键字作为“返回类型”。


请记住,这void也有其他用途;尤其:

  • 如果将其指定为函数的参数列表,则意味着该函数不带参数;这在 C 中是必需的,因为没有参数的函数声明对编译器意味着参数列表只是未指定。在 C++ 中,这不再需要,因为空参数列表意味着该函数不允许任何参数;

  • void在指针中也有重要作用;void *(及其变体)表示“指向未指定内容的指针”。如果您必须编写必须存储/传递指针而不实际使用它们的函数,这很有用(仅在最后,要实际使用指针,需要转换为适当的类型)。

  • 此外,强制转换(void)通常用于将值标记为故意未使用,从而抑制编译器警告。

    int somefunction(int a, int b, int c)
    {
        (void)c; // c is reserved for future usage, kill the "unused parameter" warning
        return a+b;
    }
    
于 2012-07-19T11:43:03.223 回答
7

在诸如 C、C++、Java 等命令式编程语言中,函数和类型void的方法用于它们的副作用。它们不会产生有意义的返回值,但它们会以多种可能的方式之一影响程序状态。例如,exitC 中的函数不返回任何值,但它具有中止应用程序的副作用。另一个例子,一个 C++ 类可能有一个 void 方法来改变它的实例变量的值。

于 2012-07-19T11:44:12.323 回答
7

void() 表示什么都不返回。

void并不意味着什么void是一种不代表什么的类型。这是一个微妙的区别:仍然需要表示,即使它不代表任何内容。

类型 用作函数的返回类型,不返回任何内容。这也用于表示通用数据,当它用作void*. 所以这听起来很有趣,虽然void代表什么,但void*代表一切

于 2012-07-19T11:45:02.513 回答
7

这个问题与语言的历史有关:C++ 从 C 中借用,而 C 曾经隐式地将所有未类型化的内容键入为int(事实证明,这是一个可怕的想法)。这包括旨在作为过程的函数(回想一下,函数和过程之间的区别在于函数调用是表达式,而过程调用是语句)。如果我从阅读早期的 C 书籍中没记错的话,程序员过去常常用一个来修补这个缺点#define

#define void int

这个约定后来在 C 标准中被采用,并且void引入了关键字来表示打算作为过程的函数。这非常有帮助,因为编译器现在可以检查您的代码是否使用了一个不打算返回任何内容的函数的返回值,并警告您应该返回但让控件运行结束的函数。

于 2012-07-19T11:48:30.540 回答
3

因为有时您不需要返回值。这就是我们使用它的原因。

于 2012-07-19T11:42:03.103 回答
1

如果你没有void,你将如何告诉编译器一个函数没有返回值?

于 2012-07-19T11:43:31.133 回答
1

原因考虑某些情况,您可能必须对全局变量进行一些计算并将结果放入全局变量中,或者您想根据参数打印一些东西等。在这些情况下,您可以使用不返回值的方法..即。空白

于 2012-07-19T11:51:47.560 回答
1

这是一个示例函数:

struct SVeryBigStruct
{
    // a lot of data here
};

SVeryBigStruct foo()
{
    SVeryBigStruct bar;
    // calculate something here

    return bar;
}

现在这是另一个功能:

void foo2(SVeryBigStruct& bar) // or SVeryBigStruct* pBar
{
    bar.member1 = ...
    bar.member2 = ...
}

第二个函数更快,它不必复制整个结构。

于 2014-08-30T20:07:10.047 回答
0

可能是告诉编译器“您不需要推送和弹出所有 cpu 寄存器!”

于 2012-07-19T11:41:11.040 回答
0

有时它可以用来打印某些东西,而不是返回它。有关示例,请参见http://en.wikipedia.org/wiki/Mutator_method#C_example

于 2012-07-19T11:45:29.290 回答
0

函数不需要返回值。为了告诉编译器函数不返回值,返回类型为 void。

于 2018-04-26T02:31:31.303 回答