函数应该有原型错误

时间:2014-09-20 11:44:03

标签: c turbo-c

我写了以下C程序:

#include<stdio.h>
 #include<stdlib.h>
 void main()
 {
    int count;
    scanf("%d",&count);
    if(count < 1 || count > 100)
    {
        exit(1);
    }
    int inputs[10];
    for(int i = 0; i < count; i++)
    {
        scanf("%d",&inputs[i]);
        if(inputs[i] < 1 || inputs[i] > 30000)
        {
            exit(1);
        }
    }
    for(i = 0; i < count; i++)
    {
        printPrimeFactor(inputs[i], 2);
        printf("\n");
    }
 }

 void printPrimeFactor(int number, int factor)
 {
    if(number % factor == 0)
    {
        int flag = 1, newNumber;
        newNumber = number;
        for(int i = 0; i < factor/2; i++)
        {
            if(factor % i == 0)
            {
                flag = 0;
                break;
            }
        }
        if (flag)
        {
            printf("%d ", factor);
            newNumber = number / factor;
        }
        factor++;
        if(factor <= newNumber / factor)
        {
            printPrimeFactor(newNumber, factor);
        }
    }
 }

在编译时(在windows中,turbo C),我一直在收到错误:

Function 'printPrimeFactor' should have a prototype error

我无法找到代码的任何问题。可能是什么问题?

7 个答案:

答案 0 :(得分:5)

在编译器看到它的定义之前调用你的函数,所以编译器说&#34;我想先看看这个函数的原型&#34;。

这意味着您在函数调用之前放置了void printPrimeFactor(int number, int factor);

或者,您可以在调用之前放置整个函数(即其定义)。

答案 1 :(得分:1)

你应该在main()

之前声明printPrimeFactor()

答案 2 :(得分:1)

如果在main函数之后定义了函数,则需要添加函数原型。

所以,添加

void printPrimeFactor(int number, int factor); 

main函数之前。

此外,main还会返回int而不是void

答案 3 :(得分:1)

当编译器遇到printPrimeFactor()中对main()的调用时,它还没有看到定义,因此需要假设它是一个返回int的函数,并且从第一次遇到调用时传递给参数的参数推断出参数的数量和类型。

在这种情况下,printPrimeFactor()不会返回int。遇到定义时,编译器会检测定义签名和推断声明之间的差异。解决方案是在使用前定义或在使用前添加显式原型声明。例如,在main()之前添加:

void printPrimeFactor(int number, int factor) ;

ANSI C89和ISO C90允许隐式声明,C99和C ++不允许。你应该使用古老的16位编译器的原因很少。尤其是因为IDE,编译器及其生成的代码都不会在Win64上运行。

答案 4 :(得分:1)

函数应该有一个原型错误,据我所知有两种方法:- 1)如果您在main()之前定义函数名称,则称为函数声明 像

#include<stdio.h>
#include<stdlib.h>
void prinPrimeFactor(int number, int factor);
void main()

2)如果在main()之前使用了total函数,则其工作原理类似于

#include<stdio.h>
#include<stdlib.h>
void primePrimeFactor(int number, int factor)
{

statement(s);
}
void main()
{
statement(s);
}

答案 5 :(得分:0)

编译器希望在调用之前查看程序中的所有函数。所以你要么在main之前编写整个函数,要么在main之前给出函数的原型,然后在main之后编写函数。

所以在上面的程序中,函数“void printPrimeFactor(int number,int factor)”在main之后,所以你必须给出函数的原型。 函数的原型只不过是函数的全名,即

void printPrimeFactor(int number, int factor)

所以程序应该是这样的

 #include<stdio.h>
 #include<stdlib.h>
 void printPrimeFactor(int number, int factor)
 void main()
 {

答案 6 :(得分:-2)

这是因为头文件 <stdib.h> 错误。