如果void()没有返回值,我们为什么要使用它?

Mus*_*sif 14 c++ types void

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

Mat*_*lia 33

当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;
    }
    
    Run Code Online (Sandbox Code Playgroud)

  • 明确丢弃右侧表达式的值.即使你没有写`(void)`它也会这样做,但是它(向读者和编译器)澄清你*真的*不关心返回值; 这用于在您明确不关心这些值的情况下关闭一些警告(未使用的返回值,未使用的参数).同样,它对生成的代码没有任何特殊的影响,但它是一个传达特定含义的习语. (3认同)

Naw*_*waz 7

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

void并不意味着什么.void是一种类型,以代表什么.这是一个微妙的差异:表示仍然是必需的,即使它代表什么都没有.

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


das*_*ght 7

这个问题与语言的历史有关:C++是从C语言中借用的,C语言用于隐式键入所有类型的无类型int(事实证明,这是一个可怕的想法).这包括用作过程的函数(回想一下,函数和过程之间的区别在于函数调用是表达式,而过程调用是语句).如果我从阅读早期的C书中正确地回忆起它,程序员过去常常用以下方法修补这个缺点#define:

#define void int
Run Code Online (Sandbox Code Playgroud)

此约定后来在C标准中采用,并且void引入了关键字以表示用作过程的函数.这非常有用,因为编译器现在可以检查您的代码是否使用了一个函数的返回值,该函数不是为了返回任何东西,并警告您应该返回的函数,而是让控件在最后运行.

  • +1因为我在旧代码中看到了这个`define`语句,被带有荒谬标签的`ifdef`封锁了,并且无法弄清楚为什么有人写了它. (3认同)

wal*_*pus 5

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

  • 实际上`printf`返回的`int`值等于打印的字符数. (4认同)