繁体   English   中英

从函数冲突类型返回数组

[英]Return array from function -conflicting types for

我的目的是在函数中创建一个数组,然后将其返回给main函数。 建议我在函数中的堆上分配数组(否则,返回数组后立即从堆栈中弹出)。

代码如下所示:

 #include <stdlib.h>
 int main() {

    double *v1 = myFunction();

    return 0;
 }



 double *myFunction() {
   return malloc(10*sizeof(double));
 }

当我用gcc编译此代码时,出现以下错误消息:

 ..\src\main3.c:38:9: error: conflicting types for 'myFunction'

此代码有什么问题? 为什么会出现此编译错误?

在使用myFunction()的原型之前,即在main()之前,如下所示:

double * myFunction();

int main(void)
{
  ...

如果不这样做,则编译器在首次看到myFunction()时会假定其类型为int

后来发现它被声明为double * (与int不同),然后引发了错误。

打开所有警告将指示您使用没有原型的函数。 使用-Wall -Wextra -pedantic打开大多数gcc的警告。


另一个问题是,声明没有指定任何参数的函数会使它打开调用该函数所要传递的内容:

double * myFunction();

如果应指定一个函数包含任何参数,则将void指定为参数:

double * myFunction(void);

代码定义main() 应为:

int main(void);

或者是

int main(int argc, char ** argv);

1)在开始时添加myfunction原型,如下所示或

double *myFunction();
 int main() {
    double *v1 = myFunction();
    return 0;
 }
 double *myFunction() {
   return malloc(10*sizeof(double));
 }

2)。 或在调用functionBody之前定义它

 double *myFunction() {
   return malloc(10*sizeof(double));
 }

 int main() {
    double *v1 = myFunction();
    return 0;
 }

但是,第一种解决方案是优选的。

您的代码几乎可以正常运行,只有一点点但有阻塞错误,您正在尝试在定义符号之前使用myFunction,所有要做的就是:

#include <stdlib.h>
double *myFunction() { // myFunction should be declared before it's used
    return malloc(10*sizeof(double));
}

int main() {
    double *v1 = myFunction();
    return 0;
}

公开的C书指出: C中的所有标识符都必须在使用前声明。对于函数和变量,这都是正确的。” C的美丽之处在于您可以做的事情可以像这段代码一样出色,但是您应该遵循一些准则,阅读开放的C书!

干杯。

尝试这个..

 return (double*) malloc(10*sizeof(double));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM