首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从函数-conflicting类型返回数组

从函数-conflicting类型返回数组
EN

Stack Overflow用户
提问于 2013-12-27 10:31:42
回答 4查看 567关注 0票数 0

我的目的是在一个函数中创建一个数组,然后将它返回到主函数。建议我在函数中的堆上分配数组(否则会在返回时从堆栈中弹出)。

守则如下:

代码语言:javascript
复制
 #include <stdlib.h>
 int main() {

    double *v1 = myFunction();

    return 0;
 }



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

当我与gcc一起编译这段代码时,我会收到以下错误消息:

代码语言:javascript
复制
 ..\src\main3.c:38:9: error: conflicting types for 'myFunction'

这个代码有什么问题?为什么我会得到这个编译错误?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-12-27 10:34:10

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

代码语言:javascript
复制
double *myFunction();
 int main() {
    double *v1 = myFunction();
    return 0;
 }
 double *myFunction() {
   return malloc(10*sizeof(double));
 }

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

代码语言:javascript
复制
 double *myFunction() {
   return malloc(10*sizeof(double));
 }

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

然而,第一种解决方案更可取。

票数 0
EN

Stack Overflow用户

发布于 2013-12-27 10:33:27

在使用myFunction()之前,即在main()之前提供它的原型,如:

代码语言:javascript
复制
double * myFunction();

int main(void)
{
  ...

如果不这样做,编译器将在第一次看到myFunction()时使用myFunction()类型。

之后,它发现它被声明为double * (与int不同),这将引发错误。

打开所有警告都会指向您使用没有原型的函数。使用-Wall -Wextra -pedantic来打开gcc的大部分警告。

另一个问题是,在没有指定任何参数的情况下声明一个函数可以打开调用函数时传递的内容:

代码语言:javascript
复制
double * myFunction();

如果一个函数应该被指定为,而不是有任何参数,那么指定void作为参数:

代码语言:javascript
复制
double * myFunction(void);

代码定义main()的方式也是一样的。它应是:

代码语言:javascript
复制
int main(void);

或者要么是

代码语言:javascript
复制
int main(int argc, char ** argv);
票数 1
EN

Stack Overflow用户

发布于 2013-12-27 10:54:26

您的代码几乎没有问题,只有一个小的但阻塞的错误,在定义符号之前,您正在尝试使用myFunction,您所要做的就是:

代码语言:javascript
复制
#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书!

干杯。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20799064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档