// screen.h
#ifndef screen_h
#define screen_h
#define MAC 1
#define WIN 2
#define LNX 3
#ifdef PLATFORM
# undef PLATFORM
#endif
#define PLATFORM MAC
void screen_init();
#endif
// screen.c
#include <string.h>
#include <stdlib.h>
#include "screen.h"
#if PLATFORM == MAC
#include <curses.h>
void screen_init(){
erase();
}
#endif
我不明白为什么它没有在screen.h中看到我的原型
任何建议/提示都表示赞赏!
答案 0 :(得分:45)
ISO / IEC 9899:TC2 - 6.2.1.2:
函数原型是声明其参数类型的函数的声明。
函数声明中的空参数列表表示参数的数量和类型未知。您必须使用void
关键字明确指出该函数不带参数。否则,您的函数声明不会被视为有效的原型。
void screen_init(void);
答案 1 :(得分:2)
我几分钟前遇到过类似的错误。在头文件中添加了相关函数声明后,错误消失了。
另外,有些人说取消编译选项'-Wmissing-prototypes'应该有效,但我没有尝试过。祝你好运。
答案 2 :(得分:2)
我今天遇到了这个问题。
我定义了一个仅在内部使用的函数
void func(void) {
}
int main(void) {
func();
}
这将给我该警告。 我必须在文件的开头添加原型,以消除警告。
void func(void);
void func(void) {
}
int main(void) {
func();
}