在 c 中返回结构的函数出错:预期标识符或参数前的“(”
Posted
技术标签:
【中文标题】在 c 中返回结构的函数出错:预期标识符或参数前的“(”【英文标题】:Error in function that returns a struct in c: expected identifier or '(' before paramter 【发布时间】:2021-11-25 23:12:55 【问题描述】:我是 c 新手,我正在尝试创建一个函数,该函数接受两个 double 类型的参数作为输入,并返回一个包含每个参数的结构,作为称为“实数”和虚数的成员。我得到的错误是:
error: expected identifier or ‘(’ before ‘double’
错误指向我定义函数的行。我知道还有其他帖子涵盖了同样的错误,但据我所知,这与那些问题不同(如果是,请道歉)。
这是我的代码:
#include <stdio.h>
int main(void)
return 0;
struct make_complex(double real_input, double imaginary_input)
struct complex
double real;
double imaginary;
complex_output = real_input, imaginary_input;
return complex_output;
我最终想在 main 中调用 make_complex 函数,但我已经完全简化了 main 以消除任何其他错误来源。我曾尝试在函数定义之前声明 make_complex 函数,如下所示:
struct make_complex(double real_input, double imaginary_input);
这不起作用。想法?
感谢您的宝贵时间。
【问题讨论】:
struct make_complex()
是胡言乱语。使用struct前需要学习struct。
【参考方案1】:
函数的返回类型需要包含结构类型,而不仅仅是struct
。您应该在函数外部定义结构类型,以便在调用者中引用它。
#include <stdio.h>
struct complex
double real;
double imaginary;
;
int main(void)
return 0;
struct complex make_complex(double real_input, double imaginary_input)
struct complex complex_output = real_input, imaginary_input;
return complex_output;
【讨论】:
【参考方案2】:在这个函数声明中
struct make_complex(double real_input, double imaginary_input)
编译器将此行视为名称为 make_complex
的结构的声明。
你需要在函数声明之前定义结构复合体,例如
struct complex
double real;
double imaginary;
;
struct complex make_complex(double real_input, double imaginary_input)
struct complex complex_output = real_input, imaginary_input;
return complex_output;
在 C 中你甚至可以在函数返回类型的声明中定义结构
struct complex double real; double imaginary;
make_complex(double real_input, double imaginary_input)
struct complex complex_output = real_input, imaginary_input;
return complex_output;
虽然这不是一个好主意。:)
【讨论】:
@user3629249 如果未指定返回类型,则声明不正确。 另外,请注意 `double complex' 是现代 C 中的有效类型 @user3629249 编译器是否支持该类型由实现定义 @user3629249 我不明白你关于签名的问题,因为我的回答中有这样的声明。 我读得太快了,错过了结构定义末尾不是分号的细节以上是关于在 c 中返回结构的函数出错:预期标识符或参数前的“(”的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 如何将结构用作函数返回类型或函数的参数? - 来自https://playground.arduino.cc/Code/Struct