我的目的是在函数中创建一个数组,然后将其返回到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'
这段代码有什么问题?为什么我会收到此编译错误?
答案 0 :(得分:1)
在使用之前提供myFunction()
的原型,就像main()
之前那样:
double * myFunction();
int main(void)
{
...
如果不这样做,编译器会在第一次看到int
时假定myFunction()
类型。
稍后它发现它被声明为double *
(与int
不同),然后引发错误。
打开所有警告会指向您使用没有原型的函数。使用-Wall -Wextra -pedantic
打开gcc的大部分警告。
另一个问题是声明一个没有指定任何参数的函数会让它打开调用函数时传递的内容:
double * myFunction();
如果函数应指定为不,则任何参数都指定void
作为参数:
double * myFunction(void);
代码定义main()
的方式相同。应该是:
int main(void);
或者是
int main(int argc, char ** argv);
答案 1 :(得分:0)
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;
}
然而,第一种解决方案更可取。
答案 2 :(得分: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书中陈述"All identifiers in C need to be declared before they are used. This is true for functions as well as variables." C中的美丽是你可以做的就像this piece of code那样可以做一些惊人的事情,但你应该遵循一些指导原则,阅读开放的C书!。
干杯。
答案 3 :(得分:-1)
试试这个..
return (double*) malloc(10*sizeof(double));