【发布时间】:2013-04-02 04:37:30
【问题描述】:
在下面的程序中,我使用了两个函数 prd() 和 display()。在 main() 中调用它们之前,我没有在 main() 之前声明它们,并且我在 main() 之后定义了它们。然而虽然 prd() 在 main() 中工作顺利,但调用 display() 会显示警告“先前隐式声明 'display' 在这里”。 display() 有什么不同之处在于它有一个警告但其他功能没有prd()?我一开始都没有声明它们。由于调用一个,仍然有警告,但另一个工作正常。
#include<stdio.h>
int main()
{
int x=8,y=11;
printf("The product of %d & %d is %d",x,y,prd(x,y));
display();
return 0;
}
int prd(int x,int y)
{
return x*y;
}
void display()
{
printf("\n Good Morning");
}
PS:如果您能回答这个次要问题,我将不胜感激——“函数声明在 C 中是否根本不需要,只要有定义吗?”。我有声明程序的所有函数的习惯在 main() 函数之前,然后在 main() 函数之后定义它们。我错了吗?
【问题讨论】:
-
旁注:
int main()是 NOT 在 C 中提供原型的正确声明(与 C++ 不同)。它是老式的、已弃用的 K&R 风格,表示 main 采用未指定但固定数量的参数。暂时使用int main(void),直到永远。 -
哦,我一定会记住这一点的。我之前曾被警告过,但由于我的编译器从来没有遇到过问题,所以我没有打扰。如果我使用某些东西会遇到问题已弃用?它会在代码块的 C99 模式下显示错误/警告吗?
-
@Jens 在你发表评论之前我已经给你发了消息。这是关于我的另一个问题,你回答的关于递归的问题。我想知道是否可以表达任何像 x^23 这样的数字作为 x^16 * x^4 * x^2 * x^1 (每个幂都是前幂的平方根,直到它是 1)。我理解你的公式,但另一个用户 Cobbal 有这个公式。
-
你会收到
int main()的警告,gcc -Wstrict-prototypes说warning: function declaration isn’t a prototype。添加-Werror会将其变为错误。 -
@Jens 我很不幸我不熟悉 Linux 和从命令提示符编译。所以请简明扼要地告诉我,如果“-Werro”是我们可以在使用 gcc 编译时添加的选项命令提示符?是吗?它是什么意思?简而言之,什么是gcc-Wstrict-prototypes?我什至不知道这么多,我感到很痛苦。
标签: c