C 为什么跳过void函数调用而不捕获它们?

C 为什么跳过void函数调用而不捕获它们?,c,return,function-call,C,Return,Function Call,我想调用一个计算圆宽度的函数 我想调用//void area vp//中的函数,但无法捕获visual stdio中的错误并按原样继续。您知道原因是什么吗?要调用该函数,请编写areavp;非无效区域VP 后者,如函数main中所示,是一个函数原型,没有运行时效果 修正PI的定义:考虑到你使用的是双精度类型,你的定义是非常不充分的。参见你应该写的 area(&r); area(vp); 而不是错误和多余的 void area(vp); 加上你在语法上犯的明显错误 我看不出副总

我想调用一个计算圆宽度的函数

我想调用//void area vp//中的函数,但无法捕获visual stdio中的错误并按原样继续。您知道原因是什么吗?

要调用该函数,请编写areavp;非无效区域VP

后者,如函数main中所示,是一个函数原型,没有运行时效果

修正PI的定义:考虑到你使用的是双精度类型,你的定义是非常不充分的。参见你应该写的

  area(&r);
area(vp);
而不是错误和多余的

 void area(vp);
加上你在语法上犯的明显错误

我看不出副总裁有什么理由在那里

为确保scanf成功,请始终检查调用的返回值

引用C11,第§6.8.6.4章

带有表达式的返回语句不应出现在返回类型为 它是空的。[……]


代码有三个问题

对于初学者来说,不清楚为什么指针vp被声明为void*类型,尽管在程序中它仅用于指向double类型的对象

为什么不这样宣布呢

double *vp = NULL;
因此,这一技巧与指针有关

(double*)vp = &r;
不会编译,因为在左侧,表达式double*vp是右值,可能未赋值

你可以直接写

vp = &r;
第二个问题是这种说法

void area(vp);
也是无效的。要调用函数,您应该编写

  area(&r);
area(vp);
第三个问题是,返回类型为void的函数不能在return语句中指定表达式

void area(vp);
此声明应删除

return 1;
从C标准6.8.6.4返回语句

void area(vp);
1带有表达式的返回语句不得出现在 返回类型为void的函数。一个不带空格的返回语句 表达式只能出现在返回类型为void的函数中

将函数的参数声明为具有引用类型是没有意义的

函数定义可以如下所示

double area( double dp )
{
    const double PI = 3.14;

    return dp * dp * PI;
}
调用pf printf的语句应在main中移动

printf( "circle are is : %.2lf", area( r ) );

作业vp=&r中的演员阵容是不需要的。@visual studio-2015标签中的某个程序员可能意味着期望像二十年前那样的C行为标准化在这里要求太多了。area的返回类型为void,但返回int。如果函数声明返回void,则无法返回值。基本上,这大部分都不是有效的C。您需要一本好的C编程书和更好的编译器。这是函数声明吗?在某些方面,它最接近于此,但vp不是一个类型名,所以我认为它只是一个混合混乱。void阻止它成为函数调用;vp阻止它成为函数声明。