我已经看到了一个关于它的问题,不止一个,但它并没有真正解决我的问题。代码更大,但问题在于这一部分。我有这个东西:
int globalx=12;
int globaly=10;
void Function (int measurex, int measurey)
float thingx()
{
(((globalx/2)-measurex)/(globalx/2));
}
float totalx=globalx/(float)thingx;
float totaly=globaly/2;
并且它有一些错误返回该错误。顾名思义,globalx和globaly是两个全局变量。我在这做错了什么?我怎么能写一些能做我打算做的事呢?
答案 0 :(得分:1)
关于代码的一些事情:
thingx
替换为thingx()
。Function
定义应位于大括号{...}
内。thingx()
定义之外定义Function
(依赖于编译器,因为Nested functions are not allowed in standard C)。return
函数添加thingx()
语句。int measurex
作为参数添加到thingx()
函数。Function
中,在获取totalx和totaly的值后,你没有对它们做任何事情(也许你只是没有把这个函数的全部代码放在你的问题中)。您的函数定义应如下所示:
float thingx(int measurex)
{
return (((globalx/2)-measurex)/(globalx/2));
}
void Function (int measurex, int measurey) {
float totalx=globalx/(float)thingx(measurex); // <-- missing parentheses, should be thingx(...)
float totaly=globaly/2;
// You probably want to do something with totalx and totaly here...
}
主:
int globalx=12;
int globaly=10;
Function(globalx, globaly);
另外,请记住,这会将结果截断为整数globaly/2
,因为globaly
定义为 int (您可以阅读有关整数除法的信息:
What is the behavior of integer division?)
答案 1 :(得分:0)
你的代码真的搞砸了。对于您的功能,您需要将所有代码放在大括号{}中。像这样......
void myFunction(int a, int b)
{
//put your code in here
}
答案 2 :(得分:0)
您看到的错误,因为thingx()
是一个函数,thingx
基本上是一个函数指针,并且您正在尝试使用float
进行划分函数指针。
首先,请允许我明确声明Nested functions are not standard C
. They are supported as GCC extension.。
话虽如此,在你的情况下,你需要
将thingx()
函数定义移到Function()
之外。
就像您对thingx()
函数所做的那样,Function()
的正文也应该在{...}
内。
使用函数调用运算符()
来调用函数。所以基本上你的陈述应该是
float totalx=globalx/(float)thingx(measurex);
ad函数定义应该看起来像
float thingx(int measurex){..
在您的函数中添加return
语句。根据{{1}}标准,章节§6.9.1
如果到达了终止函数的
C11
,则使用函数调用的值 调用者,行为未定义。
所以,函数体应该看起来像
}