这是我的主要功能和我传递的内容。
int main(void){
struct can elC[7]; // Create an array of stucts
Initialize(elC); // initializes the array
return 0;
}
int Initialize(struct can elC[7]){
}
在C中我们不必在main之前声明函数吗?如果是这样的话怎么样?我的代码在
的声明中运行良好int Initialize();
但我不需要像
这样的东西int Initialize(struct can elc[7]);
答案 0 :(得分:0)
/* Declaration of Structure */
struct can {
/* Structure members */
};
/* Function Prototype - ANY OF THE THREE */
int Initialize();
int Initialize(struct can []);
int Initialize(struct can var[]);
int main (void)
{
struct can elC[7]; // Create an array of stucts
Initialize(elC); // Call to function - Initializes the array
return 0;
}
int Initialize(struct can elC[7])
{
//Do something;
return 0;
}
如果你没有宣布原型
,会发生什么以下工作正常。
$ gcc filename.c
如果与-Wall
选项结合使用警告,则会发出警告。
$ gcc filename.c -Wall
In function ‘main’:
Warning: implicit declaration of function ‘Initialize’ [-Wimplicit-function-declaration]
因此,最好在main
之前声明原型
int Initialize(struct can []);
或
int Initialize(struct can var[]);
下面也是有效的,意味着你可以传递任意数量的参数。见here。
int Initialize();
答案 1 :(得分:0)
在C89中,你不必在调用它之前声明一个函数;但是,如果您调用未声明的函数,就好像您将函数声明为:
int funcname();
空括号并不意味着该函数不带参数;它只是意味着我们的声明不是原型。在这个阶段,参数的数量和类型是未知的(但它不是采用像printf()
那样的可变参数列表,因为即使在C89中,那些必须具有原型使用范围时。)
如果实际函数返回int
以外的其他函数,或者使用错误类型或参数数量调用它,或者在应用默认参数促销后任何参数具有不同类型,则调用该函数导致未定义的行为。
您的代码不会受到任何这些限制的影响,因此您的代码在C89中是正确的。然而,无论如何它都被认为是好的风格,因为它使编译器能够检测所有这些条件并报告错误。
在C99中,您必须在调用之前声明该函数。一个合适的原型将是:
int Initialize(struct can *elC);
如果您的编译器支持,我建议使用C99或C11。关于在函数参数列表see here中使用[]
。