

stackが空状態ならエラーを出すように組んだんですが、警告されます。  
原因などがあるのでしょうか？

[code]

    if(isStackEmpty()){
        error("stackが空状態です");
        exit(1);
    
[/code]


CC BY-SA 4.0
2021-06-02T14:38:00.850
76277
2021-06-03T02:01:58.820
2021-06-02T16:39:08.827
3060
45615
question
c
errorを表示させたいのに、警告でperrorではないかと表示される


コードが一部分しか提示されていないので憶測を含みますが、少なくともよく使われる stdio.h の中に `error`
関数は定義されていないので、エラー時にメッセージを出すのが目的であれば、コンパイラが警告を出している通り `perror`
を使うべきなのではないでしょうか？

**参考:**  
[標準Cライブラリ | 入出力 stdio.h |
Wikipedia](https://ja.wikipedia.org/wiki/%E6%A8%99%E6%BA%96C%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA#%E5%85%A5%E5%87%BA%E5%8A%9B_stdio.h)

(名前に "errror" を含むもののみ抜粋)

>   * ferror — エラー表示子の判定
>   * perror — 標準エラー出力へのエラーメッセージの出力
>


CC BY-SA 4.0
2021-06-02T16:47:58.813
76281
2021-06-02T16:47:58.813
3060
76277
answer


下記サンプルコード（要は `error()` の先行宣言なし＝バグっているというか古いスタイル）

[code]

    #include <stdio.h>
    #if 0
    #include <stdlib.h>
    void error(const char* message) {
        fprintf(stderr, "%s\n", message);
        exit(0);
    }
    #endif
    int main() {
        error("stackoverflow");
    }
    
[/code]

を [cygwin](/questions/tagged/cygwin "'cygwin' のタグが付いた質問を表示") gcc-10.2.0
でコンパイルしてみます

[code]

    $ gcc -c perrortest.c 
    perrortest.c: In function 'main':
    perrortest.c:10:2: warning: implicit declaration of function 'error'; did you mean 'perror'? [-Wimplicit-function-declaration]
       10 |  error("stackoverflow");
          |  ^~~~~
          |  perror
    $ 
    
[/code]

警告内容をオレオレ意訳すると

  * 標準関数 `perror` ときわめて類似した名前の `error` という関数が宣言なしに使われているが、これは `perror` の書き間違いではないか

`#if 0` を `#if 1` にすると `error()` 関数は使用前に原型宣言されており、かつ宣言通りに使われているので `perror`
の間違いではないかという警告は出なくなります。

ということであなたのソースコードが断片的過ぎて断言できませんが `error()`
関数の原型宣言を追加してやれば警告は消えるでしょう、という回答になります。


CC BY-SA 4.0
2021-06-03T02:01:58.820
76286
2021-06-03T02:01:58.820
8589
76277
answer