为什么没有参数的函数起作用,但是以void作为参数的函数却不起作用?

问题描述 投票:0回答:2

[在以下代码中,我正在使用PI外部的函数来计算main()。两者之间的唯一区别是:

  • 第一个代码。我没有传递任何参数:void calculate_pi ();
  • 第二代码。我明确地说没有要传递的参数:calculate_pi (void);

我本以为第二个更好,但事实并非如此。为什么是这样?谢谢!

第一密码:

#include <stdio.h>
#include <stdlib.h>

void calculate_pi ();

int main(void)
{

    calculate_pi ();

    return 0;
}

void calculate_pi ()
{
    int i, signo;
    double pi_approx = 1, pi_final;

    for (i = 1; i < 1000000; ++i)
        {
            signo = (i%2) ? -1 : 1;
            pi_approx = pi_approx + (float) signo / (2*i+1);
        }

    pi_final = pi_approx * 4;
    printf("%.10f\n", pi_final);
}

第二代码:

#include <stdio.h>
#include <stdlib.h>

void calculate_pi (void);

int main(void)
{

    calculate_pi (void);

    return 0;
}

void calculate_pi (void)
{
    int i, signo;
    double pi_approx = 1, pi_final;

    for (i = 1; i < 1000000; ++i)
        {
            signo = (i%2) ? -1 : 1;
            pi_approx = pi_approx + (float) signo / (2*i+1);
        }

    pi_final = pi_approx * 4;
    printf("%.10f\n", pi_final);
}
c arguments void
2个回答
0
投票

[在函数的声明/定义中使用void作为参数与在实际调用函数时作为参数是有区别的。

“绝对不能使用void表达式(具有void类型的表达式)的(不存在)值,并且不得将隐式或显式转换(除void之外)应用于此类表达式。任何其他类型都将作为void表达式求值,其值或指示符将被丢弃。(对void表达式的副作用进行求值。)“

来源:C18,6.3.2.2 / 1

void只能用作参数,而不能用作函数调用中的参数。不得使用类型为void的表达式。否则,这是未定义的行为。

如果定义为calculate_pi,则需要将calculate_pi()称为(return type) calculate_pi (void)


-1
投票

基于@KamilCuk的注释,那么正确的代码应为:

#include <stdio.h>
#include <stdlib.h>
#define PI 3.14159265359

void calculate_pi (void);

int main(void)
{

    calculate_pi ();

    return 0;
}

void calculate_pi (void)
{
    int i, signo;
    double pi_approx = 1, pi_final;

    for (i = 1; i < 1000000; ++i)
        {
            signo = (i%2) ? -1 : 1;
            pi_approx = pi_approx + (float) signo / (2*i+1);
        }

    pi_final = pi_approx * 4;
    printf("%.10f\n", pi_final);
}
© www.soinside.com 2019 - 2024. All rights reserved.