web-dev-qa-db-ja.com

エラー:関数の以前のプロトタイプがありません。このエラーが発生するのはなぜですか?

// 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でプロトタイプが表示されない理由がわかりません。

どんな提案/ヒントも大歓迎です!

29
jasonaburton

ISO/IEC 9899:TC2-6.2.1.2:
関数プロトタイプは、そのパラメーターの型を宣言する関数の宣言です。

関数宣言内の空の引数リストは、パラメーターの数とタイプが不明であることを示します。 voidキーワードを使用して、関数が引数を取らないことを明示的に示す必要があります。それ以外の場合、関数宣言は有効なプロトタイプとしてカウントされません。

void screen_init(void);
46
mizo

私は数分前にこのようなエラーに遭遇しました。相対ファイル宣言をheadファイルに追加した後、エラーは消えました。
また、コンパイルオプション「-Wmissing-prototypes」をキャンセルしても機能するはずだと言う人もいましたが、私はそれを試していませんでした。幸運を。

3
ProbHunter

今日、この問題が発生しました。

内部で使用したばかりの関数を定義しました

void func(void) {
}

int main(void) {
    func();
}

これは私にその警告を与えます。警告を取り除くために、ファイルの先頭にプロトタイプを追加する必要がありました。

void func(void);

void func(void) {
}

int main(void) {
    func();
}
2
Paul