为什么在函数内部声明后struct不存在?

时间:2019-10-02 20:54:54

标签: c struct

我已经尝试了很多简单的例子,但是没有任何作用。

我的目标是拥有一个在内部声明结构的函数,设置该结构的值,然后返回该结构。

struct getData(void){
    typedef struct{
        int count1;
        int count2;
    } MyStruct;

    MyStruct myData;

    myData.count1 = 5;
    myData.count2 = 6;

    return myData;
};

int main(void) {
    struct myData = getData()

    printf("count1: %i", myData.count1);
    printf("count2: %i", myData.count2);
}

我发现的每个示例都执行类似的操作,但是由于某种原因,找不到我的名为MyStruct的结构。确切的错误是:

error: expected identifier or ‘(’ before ‘void’
 struct getData(void){
                ^~~~

我不断收到的错误让我觉得它不喜欢函数内部的结构。

2 个答案:

答案 0 :(得分:1)

您的问题似乎与struct关键字的使用有关。您不需要struct myData来声明名为myData的变量struct,因为实际上并没有struct类型。您要做的是struct myData <SOMETHING><SOMETHING>定义为名为struct myData的新数据类型。然后,您可以说struct myData dat;,从而声明dat是类型struct myData的变量。

您还在顶部展示了同样的困惑,您有struct getData(void) ...您正试图将getData声明为一个返回结构的函数,但实际上做类似struct myData getData(void)的事情来声明一个返回类型struct myData的函数。

答案 1 :(得分:0)

我认为编写您所追求的内容的更标准方法是,使用结构的独立定义,然后对函数调用使用指针。正如您编写的代码似乎存在一些范围问题(在函数内声明结构typedef,hmmm ...)[Incorrect->]而且我不认为结构可以在C中以这种方式传递,我很确定您必须使用指针。 [编辑糟糕,这是不正确的!查看评论]

#include<stdio.h>

typedef struct {
    int count1;
    int count2;
    } MyStruct;

void getData (MyStruct* myDataPtr) {
    myDataPtr->count1 = 5;    //note pointer access notation ->
    myDataPtr->count2 = 6;
};

int main(void) {
    MyStruct myData;
    MyStruct* sPtr = &myData;  //create pointer to struct, assign to myDaya
    getData(sPtr);            //pass pointer to function
    printf("count1: %i \n", myData.count1);
    printf("count2: %i \n", myData.count2);
}

输出:

count1: 5
count2: 6