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