我的目的是在一个函数中创建一个数组,然后将它返回到主函数。建议我在函数中的堆上分配数组(否则会在返回时从堆栈中弹出)。
守则如下:
#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'这个代码有什么问题?为什么我会得到这个编译错误?
发布于 2013-12-27 10:34:10
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;
}然而,第一种解决方案更可取。
发布于 2013-12-27 10:33:27
在使用myFunction()之前,即在main()之前提供它的原型,如:
double * myFunction();
int main(void)
{
...如果不这样做,编译器将在第一次看到myFunction()时使用myFunction()类型。
之后,它发现它被声明为double * (与int不同),这将引发错误。
打开所有警告都会指向您使用没有原型的函数。使用-Wall -Wextra -pedantic来打开gcc的大部分警告。
另一个问题是,在没有指定任何参数的情况下声明一个函数可以打开调用函数时传递的内容:
double * myFunction();如果一个函数应该被指定为,而不是有任何参数,那么指定void作为参数:
double * myFunction(void);代码定义main()的方式也是一样的。它应是:
int main(void);或者要么是
int main(int argc, char ** argv);发布于 2013-12-27 10:54:26
您的代码几乎没有问题,只有一个小的但阻塞的错误,在定义符号之前,您正在尝试使用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书!
干杯。
https://stackoverflow.com/questions/20799064
复制相似问题