当第一个参数是结构类型时,C 中函数声明的问题

Problem with function declaration in C when the 1st argument is a struct type

我出于某种目的正在使用其他人编写的 C 代码。编译程序时:

warning: implicit declaration of function ‘shine’ [-Wimplicit-function-declaration

我给出了下面的部分代码:

struct attribute
{
    int type, symb;      
    float lower, upper;
} examples[MaxExs][MaxAtts];

下面是在 func1() 中调用 shine() 的代码。

int func1()
{
    int e, r, nstrule;
    float lwstdist;
    ...
    shine(examples[e], &nstrule, &lwstdist, e);
    ...
}

下面是 shine() 的函数定义。

int shine(ex, nstrule, lwstdist, leftout) 
struct attribute ex[];
int *nstrule, leftout;
float *lwstdist;
{
    ...
}

我只想删除该警告。所以我想在代码的开头声明它。我尝试使用:

int shine(xxx, int*, float*, int);

我不知道我做的对不对,用什么来代替xxx。我是 C 的新手。所以我无法弄清楚。除了这些帮助,如果我能得到一些 material 来完成这个特定的事情,那将是一个很大的帮助。

您需要放置 struct attribute 的前向声明。

struct attribute;
int shine(struct attribute[], int*, float*, int);

顺便说一句。未命名的函数参数不是标准的 C。 尽管许多编译器接受它,因为它在 C++ 中是允许的并且实现起来很简单。

此功能将在即将发布的 C23 标准中添加到 C。