在 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 中返回 char (*)[6]?

c语言 退出整个程序或函数的命令是啥

在struct之前的错误预期表达式

构造函数出错(错误:'('或'['预期)[关闭]

c_cpp 如何将结构用作函数返回类型或函数的参数? - 来自https://playground.arduino.cc/Code/Struct

C#中GetWindowThreadProcessId的参数