【发布时间】:2013-11-20 08:52:40
【问题描述】:
我正在学习 C 并且我正在学习函数。所以,我读到当我实现自己的函数时,我必须在 main() 之前声明它。如果我错过了声明,编译器将收到一条错误消息。
当我研究这个例子时(查找数字是否为素数),
#include <stdio.h>
void prime(); // Function prototype(declaration)
int main()
{
int num, i, flag;
num = input(); // No argument is passed to input()
for(i=2,flag=i; i<=num/2; ++i,flag=i)
{
flag = i;
if(num%i==0)
{
printf("%d is not prime\n", num);
++flag;
break;
}
}
if(flag==i)
printf("%d is prime\n", num);
return 0;
}
int input() /* Integer value is returned from input() to calling function */
{
int n;
printf("\nEnter positive enter to check: ");
scanf("%d", &n);
return n;
}
我注意到声明了一个函数 prime(),但在 main 中,调用了一个函数 input(),并且函数 input() 在底部实现。好的,我认为这是一个错误,我将名称从 prime 更改为 input。
但是如果我删除了声明并且我没有在其中放置任何声明,那么程序编译时不会出错并且运行顺利。 (我在 Ubuntu 上编译并运行它。)
是否需要声明一个不带参数的 void 函数?
【问题讨论】:
-
一个没有参数的函数应该是
void f(void), IIRC。void f()可以接受 任何 参数(是的,这就是令人惊叹的 C 语言)。 -
prime() 永远不会被调用,是吗?所以不需要原型,因为它从来没有被调用过
-
您好像没有在任何地方打电话给
prime?如果不调用,则不需要(之前)声明它。 -
另外,教自己总是在
if等中使用花括号。即使只有一个语句。 -
您的评论不正确。
void prime();只是一个声明;它不是原型。