[英]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.