0

私はこの質問が他の場所で尋ねられたことを知っていますが、すでに与えられた答えを読むことは私を助けません。私のコードは途方もなく単純ですが、コンパイルできません。スタックを構築するためのコードを書いています。

これが私のstack.h

#ifndef GUARD
#define GUARD

struct Stack {

    struct Stack* next;
    int           data;
};
extern bool isempty (struct Stack*);

#endif

これが私のstack.c

#include <stdio.h>
#include <stdlib.h>

#include "stack.h"

bool isempty (struct Stack* st) {

    return (st == NULL);
}

コンパイラはこの行について不平を言い続けます:

extern bool isempty (struct Stack*);

myの内容main.cは関係ありません(今のところ、0を返すだけです)。誰かが私が間違っていることを理解していますか?

4

2 に答える 2

7

このタイプboolは通常、Cでは使用できません。

コンパイラがC99をサポートしている場合は、次のように追加できます。

#include <stdbool.h>

しかし、それを利用可能にするために。

更新:私の意見では、C99の使用は、「大規模な」Cプログラムでは正確には普及していません。関数の戻り値などのほとんどのブール値は、として表されますint。これは、古典的に解決されてきた方法です。unsigned int配列の場合、egではなくegにパックされたビットとして表される可能性が非常に高くなりますbool a[32];

しかし、面接の文脈では、候補者がひるむことなく上記を書くのはかなりいいことだと思います。結局、13年前に標準化されました。

于 2012-08-28T10:34:49.527 に答える
0

StとNULLを比較している場合...結果は常に0または1になります...これはCではブール型ではありません..isempty()の戻り型をintとして記述する必要があります...

于 2012-08-28T18:21:10.720 に答える