C语言函数声明中带不带标识符的问题

如下代码

void visited(List);    //问题出在这里

typedef struct Lnode
{
    int data;
}List;

int main()
{
    List *element;
    element = (List*)malloc(sizeof(List));

    element->data = 10;


    visited(*element);
    getchar();
    return 0;
}


void visited(List element)
{
    printf("%d", element.data);
    return;
}

当我在函数声明处写 visited(List element); 时,显示下列错误
图片说明
当我如上写就没有问题

这是为什么????

1、如果写成void visited(List),其实只是一句声明而已,并没有对应的函数定义,所以编译器不会报错;
2、如果写成void visited(List element),编译器认为就是对函数visited(List element)的前向声明,但是因为你的List又定义在visited函数声明的后面,所以编译器就报错了,换下位置就不会报错了,代码如下:

typedef struct Lnode
{
    int data;
}List;

void visited(List element);    //声明语句放到这里就不会报错了,C语言只支持前向声明

int main()
{
    List *element;
    element = (List*)malloc(sizeof(List));

    element->data = 10;


    visited(*element);
    getchar();
    return 0;
}


void visited(List element)
{
    printf("%d", element.data);
    return;
}

把你的visited声明放到struct定义下面就行了。因为声明放在前面还未定义List,所以编译器会报错。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^