没有以前的原型?

Sta*_*aro 6 c xcode function

可能重复:
错误:没有以前的函数原型.为什么我收到此错误?

我有一个函数,我在头文件中原型,但Xcode仍然给我警告No previous prototype for the function 'printBind'.我setBind以相同的方式使用函数原型,但在我的实现中我没有收到此函数的警告.

CelGL.h

#ifndef Under_Siege_CelGL_h
#define Under_Siege_CelGL_h

void setBind(int input);
void printBind();

#endif
Run Code Online (Sandbox Code Playgroud)

CelGL.c

#include <stdio.h>
#include "CelGL.h"

int bind;

void setBind(int bindin) { // No warning here?
    bind = bindin;
}

void printBind() { // Warning here
    printf("%i", bind);
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*ler 20

在C中,这个:

void printBind();
Run Code Online (Sandbox Code Playgroud)

不是原型.它声明了一个返回nothing(void)的函数,但是接受了一个不确定的参数列表.(但是,该参数列表不是可变的;所有采用可变长度参数列表的函数必须在范围内具有完整原型以避免未定义的行为.)

void printBind(void);
Run Code Online (Sandbox Code Playgroud)

这是函数的原型,不带参数.

C++中的规则是不同的 - 第一个声明一个没有参数的函数,并且相当于第二个.

造成这种差异的原因是历史性的(读作'追溯到20世纪80年代中期').当原型被引入C时(在它们被添加到C++之后的几年),有一个巨大的代码遗产,它声明了没有参数列表的函数(因为在添加原型之前这不是一个选项),因此向后兼容性考虑意味着这SomeType *SomeFunction();必须继续意味着'一个函数返回一个SomeType *但我们对参数列表一无所知'.C++最终添加了SomeType *SomeFunction(void);与C兼容的符号,但不需要它,因为类型安全链接是早期添加的,并且所有函数在定义或使用之前都需要范围内的原型.