

自分は最近プログラムを習い始めたのですが、

[code]

    #include <stdio.h>
    #include <handy.h>
    
    void humanA();
    
    int main(){
        humanA();
        HgGetChar();
        HgClose();
        return 0;
    }
    
    void humanA(){
        HgCircle(300,75,25);
        HgLine(300, 50, 300, 25);
        HgLine(275, 38, 325, 38);
        HgLine(275, 38, 275, 25);
        HgLine(325, 38, 325, 50);
        HgLine(300, 25, 275, 0);
        HgLine(300, 25, 325, 25);
        HgLine(325, 25, 325, 0);
    }
    
[/code]

このような感じで棒人間をプロトタイプ宣言をして表示させたいのですが  
warningが出ます。何がいけないのか教えて欲しいです。


CC BY-SA 4.0
2018-12-16T14:43:08.187
51266
2018-12-17T01:27:13.047
2018-12-16T17:30:32.677
29826
31480
question
c
c言語のプロトタイプ宣言についてです


`void humanA();` は [c](/questions/tagged/c "'c' のタグが付いた質問を表示")
の場合「プロトタイプ宣言でない関数宣言」と解釈されます。歴史的な都合により、関数の引数が `()` つまり括弧の中が空であるとき、すなわち `(void)`
でない場合、  
\- 任意の型、任意の個数の引数を受け入れる  
ような旧式の関数宣言であってプロトタイプ宣言ではないとみなされます。  
（これが昔々の [c](/questions/tagged/c "'c' のタグが付いた質問を表示") の仕様なのでそれに合わせている）

[c++](/questions/tagged/c%2b%2b "'c++' のタグが付いた質問を表示") では `void humanA();` は
`void humanA(void);` と書いたことと同じで「引数がない関数」というプロトタイプ宣言になるのですが、関数宣言の引数が空の場合に限り
[c](/questions/tagged/c "'c' のタグが付いた質問を表示") と [c++](/questions/tagged/c%2b%2b
"'c++' のタグが付いた質問を表示") で挙動が違います。

`gcc` の場合 `-Wstrict-prototypes` を指定すると提示のソースコードに対して `warning: function
declaration isn't a prototype` なる警告が３つ表示されます。


CC BY-SA 4.0
2018-12-16T23:42:15.997
51272
2018-12-17T01:27:13.047
2018-12-17T01:27:13.047
8589
8589
51266
answer