質問: stackが空状態ならエラーを出すように組んだんですが、警告されます。 原因などがあるのでしょうか? ``` if(isStackEmpty()){ error("stackが空状態です"); exit(1); ```
回答: 下記サンプルコード(要は `error()` の先行宣言なし=バグっているというか古いスタイル) ``` #include #if 0 #include void error(const char* message) { fprintf(stderr, "%s\n", message); exit(0); } #endif int main() { error("stackoverflow"); } ``` を [cygwin](/questions/tagged/cygwin "'cygwin' のタグが付いた質問を表示") gcc-10.2.0 でコンパイルしてみます ``` $ 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 $ ``` 警告内容をオレオレ意訳すると * 標準関数 `perror` ときわめて類似した名前の `error` という関数が宣言なしに使われているが、これは `perror` の書き間違いではないか `#if 0` を `#if 1` にすると `error()` 関数は使用前に原型宣言されており、かつ宣言通りに使われているので `perror` の間違いではないかという警告は出なくなります。 ということであなたのソースコードが断片的過ぎて断言できませんが `error()` 関数の原型宣言を追加してやれば警告は消えるでしょう、という回答になります。